Simplicityの特徴 › フォーラム › 不具合報告 › 最新版にてPHP Parse error
- このトピックには9件の返信、2人の参加者があり、最後に
technoteにより9年、 1ヶ月前に更新されました。
-
投稿者投稿
-
-
2016年9月26日 11:32 PM #45617
technote
ゲストわいひら様
お世話になっております。
プラグインの紹介及び、以下のコミットにて機能の追加ありがとうございます。
https://github.com/yhira/simplicity2/commit/615e76294c042c734055798e895e6d4368df84ba
しかし上記コードはPHP5.3以上を前提にしたものであるため、PHP5.3未満でエラーが発生します。if ( version_compare( phpversion(), '5.3', '>=' ) ) { }などPHPのバージョンのチェックを入れていただけると幸いです。
よろしくお願い致します。 -
2016年9月27日 12:09 AM #45621
technote
ゲストすみません。
functions.phpでバージョンチェックを行ってもパースエラーは発生してしまうので別の方法をとる必要があります。
考えつくのは以下の2通りです。
1. クラス化if ( function_exists( 'cf_get_posts' ) ) { class coordinate_with_cfiltering_plugin_class { private $num; private $posts; function __construct() { $this->posts = cf_get_posts(); if ( count( $this->posts ) > 0 ) { add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) ); } } function pre_get_posts( $query ) { $this->num = $query->query_vars['posts_per_page']; $query->set( 'p', -1 ); add_action( 'the_posts', array( $this, 'the_posts' ) ); remove_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) ); } function the_posts() { remove_action( 'the_posts', array( $this, 'the_posts' ) ); return array_slice( $this->posts, 0, $this->num ); } } new coordinate_with_cfiltering_plugin_class(); }2.別ファイルに移動
if ( version_compare( phpversion(), '5.3', '>=' ) ) { require_once 'functions53.php'; } -
2016年9月27日 7:39 AM #45632
わいひらキーマスター取り急ぎ、こんな感じで修正してみました。
https://github.com/yhira/simplicity2/commit/6fa5fcf05e12a951ac993b117c3b3ad88457db70
上記のような感じで大丈夫でしょうか。 -
2016年9月27日 8:27 AM #45633
technote
ゲスト早速の対応ありがとうございます。
修正に問題はありません。 -
2016年9月27日 10:23 AM #45638
わいひらキーマスターありがとうございます!
早速修正したものをアップしておきました。 -
2016年9月27日 10:42 AM #45642
わいひらキーマスターCFilteringのトピックということで、次いでで申しわけないのですが、プラグイン動作についても質問1つよろしいでしょうか。
CFilteringを有効化すると、毎回のアクセスごとに(1PVごとに)何かしらの計算結果をデータベースに書き込む処理を行っているのでしょうか。
例えば、Wordpress Popular Postsとかだと、アクセスがある事に、アクセス数をカウントアップしてデータベースに保存しています。
こんな感じでCFilteringもアクセスごとに、データベースに書き込みを行っているのかなと思ったもので。というのも、以前僕の本サイトの方で、(1回だけの)一時的なテレビ由来のアクセスのせいで、CPU負荷によるアクセス制限を受けたことがありまして、そのときに、毎回データベースに書き込むWordpress Popular Postsの使用は控えてといわれたもので。
なので、一度CPUアクセス制限を受けたサイトでは(CPU負荷を減らすといった意味では)、使用を控えた方が良いのかなと思いまして。
もちろん、(当サイトのような)通常のサイト運営ではものすごく有用なプラグインとして使わせていただいています。 -
2016年9月27日 1:44 PM #45653
technote
ゲスト記事へのアクセス時にユーザーのアクセス履歴をDBに追加するという認識でほぼあっています。
実際にはアクセスしたページからAjaxでアクセス情報を送信します(apis/access.php)
これはWPPとほぼ同じような動作です。
これによってページキャッシュを行っているサイトでも使用できるようになります。
またDBへの追加時の負荷はほぼWPPと同じです。
一方でCFilteringはJaccard係数を計算する必要があり、アクセスとは別におよそ10分ごとにwp-cronでバックグラウンドで計算を行います。
また一方でCFilteringではサンプリングレートの設定をすることができ、DBへの追加処理を1/10などに設定することができます。
デフォルトではJaccard係数の計算時に時間がかかりすぎる場合、もしくはデータが多すぎる場合に自動で調整を行うようにしてあります。> なので、一度CPUアクセス制限を受けたサイトでは(CPU負荷を減らすといった意味では)、使用を控えた方が良いのかなと思いまして。
アクセス時の負荷はほぼ同じなので、WPPも止めたほうがよいくらいのアクセスがある場合は使用を控えたほうがよいと考えます。
-
2016年9月27日 2:18 PM #45654
technote
ゲスト> 一方でCFilteringではサンプリングレートの設定をすることができ、DBへの追加処理を1/10などに設定することができます。
WPPの設定を見たところ、WPPでも可能でした。
またWPPは表示するためにクエリを発行していますが、これもキャッシュ可能でした。
CFilteringはすでにランキングデータになっている計算結果がpostmetaに入っているため、ランキングデータ取得時にクエリの発行はしていません。 -
2016年9月27日 3:49 PM #45656
わいひらキーマスター詳しい解説をありがとうございます!
なるほど。そんな仕組みになっていたんですね。
けれども、僕の想像していたものよりも最大限負荷軽減されるような仕組みになっているんですね。アクセス時の負荷はほぼ同じなので、WPPも止めたほうがよいくらいのアクセスがある場合は使用を控えたほうがよいと考えます。
本サイトの方でも、CFilteringを使用したくてうずうずしていたのですが、WPPと同様に控えたいと思います。ほんの数時間だけのトラフィック増加が憎い^^;
Xサーバーいわく、一度でも制限を受けた場合は、今後同様の事が起きても問題がないように、対策した状態を維持せよとのことなので(サーバーとしては当然の対処ですが)。またWPPは表示するためにクエリを発行していますが、これもキャッシュ可能でした。
これは知りませんでした。
いいことを知りました。いろいろと教えていただき、ありがとうございます! -
2016年9月27日 6:55 PM #45665
technote
ゲスト残念ですが仕方ないですね。
迅速な対応ありがとうございました。
今後ともよろしくお願い致します。
-
-
投稿者投稿
- トピック「最新版にてPHP Parse error」には新しい返信をつけることはできません。