フォーラムへの返信
-
投稿者投稿
-
enomotoキーマスター
先ほど YASAKANIキャッシュを ver1.3.2 へ更新しました
対策としては、投稿編集ページを開いた時の投稿ステータスが “公開済み” になっている場合にキャッシュの有無を確認するようにしました
従って、新規作成時や下書き保存、非公開投稿などの場合にはキャッシュ有無を確認しないのでたぶん大丈夫ではないかと思います
試してみて下さい
enomotoキーマスター(個々のページに対するキャッシュの有無の設定が出来ませんが)
ここが引っかかりました。前回付け加えた処理の影響の可能性あり (^_^;)
確定は出来ませんが、投稿編集ページを新規に作成した時(当然キャッシュは存在しない)にキャッシュの有無をSQLを使って調べている処理で時間がかかっている疑いがあります
新規ページでないときは、遅く感じないですか?
とりあえず新規ページならキャッシュの有無など調べる必要もないので、そちらは対策するとして、新規以外でも遅いようならキャッシュ有無の状態表示自体を止める可能性も…
ちょっと時期は約束できませんが、次回のバージョンアップで対策します
enomotoキーマスターご報告ありがとうございます
まったく思い当たることはないのですが、いくつか確認させてください
- 遅いのは投稿の編集画面のみですか? 他の管理ページや通常ページへのアクセスはどうですか?
- 使用ブラウザの違いはありますか(Chrome/firefox/IE/Edge …)
- YASAKANIキャッシュの設定値
- PHPのバージョン
- WordPressのバージョン
- 使用中のプラグイン
- 使用中のテーマ
- 運営中のサイトURL
ログインユーザーに対してキャッシュ処理はしないので投稿編集画面で極端に遅くするような影響を与えていることは考えにくいのですが、何か思わぬ見落としがあるのかも知れません
enomotoキーマスターたまたま動いているは、ちょっと言いすぎかも
php.net例えば $a とグローバル宣言してあるファイルから、include でテンプレートファイルを読み込んだ時に、そのテンプレートファイル内で(関数内でなく)$a 変数を参照すればグローバルスコープの変数として扱われると書かれているので、別ファイルになっていても暗黙の内にグローバルとして扱われるようです
ただ、ob_start でバッファリングした時は、何故かその暗黙のグローバルスコープとして継承されずに、未初期化のグローバル変数と見なされてしまうような感じです
何故そうなるのか、私の処理でなにか抜けているのか、そこはよくわかりません (^_^;)
ただ、明示的にグローバルと宣言してあげれば、きちんと扱えますので、今のところは暗黙のグローバルスコープの継承に頼らずに明示的に再度ファイル内でグローバル宣言が必要になってしまっているということです
従って、このような問題が起こる可能性もあるので、プログラムを別ファイルに分けた場合には、念のため明示的にグローバル宣言をしておくほうが良いようです
enomotoキーマスターWordPress テーマのテンプレートファイルの呼び出し方の違いが影響しているようなのですが、原因がわかりません
Yasakaniキャッシュでは、single.php や page.php などのテンプレートファイルの呼び出し処理部を ob_start() と ob_get_clean() を使ってバッファリングして、その出力データをキャッシュとして保存しています。
このバッファリング処理でグローバル変数が破棄されるような挙動となってしまっているようです
グローバル宣言をテンプレート内で宣言していない一部のテーマの場合はご指摘のように問題が起こる場合がありますが、テンプレートファイル内で、きちんとグローバル宣言してから変数を使っている多くのテーマ(テンプレート)では問題なく Yasakani キャッシュを使っていただいていると思っています
プラグイン側での対策ができればよいのですが、現時点では対応方法がわからないので何か情報があれば教えて下さい m(__)m
enomotoキーマスター先ほどフィルターフックの優先度を 99999 へ修正して更新しました
試してみて下さい
enomotoキーマスターnakaike さん
原因と対策まで調べていただいて、ありがとうございます m(__)m
あまり深く調べずに優先度 9999 ぐらいで大丈夫だろうと思い込んでいました
近いうちにアップデートしておきます
enomotoキーマスター私の使用環境が PHP7.0 だったので気が付きませんでしたが、PHP7.1 以上でエラーが発生するようです (>_<)
対策したバージョン 1.2.1 をアップしたので試してみて下さい
enomotoキーマスターsako さん。登録ありがとうございます
バグ報告、ご質問、ご提案等があれば新規にトピックをたてていただければと思います
Celtis_s, Celtispack を使ってみて、ここが良かった、ここがちょっと良くない等のレビューでも書いていただけると作者が喜びます (^^)
enomotoキーマスターgush2 ダウンロードして試したところ再現しました
原因は、gush2 の home.php の50行目の global で宣言が足りていません
global $wp_rewrite; を下記のように書き換えればうまくいきます
global $wp_rewrite, $wp_query, $paged;
ちなみに gush2 のコードをすべてチェックしたわけではないので、他にも同様に記述が不足している部分があれば何か不具合があるかもしれません
enomotoキーマスターPHPのバージョンが古い為にエラーとなっています
少し前に同じような問い合わせがありました
Plugin is not working on our site now
[This thread is closed.] On our site, the plugin has been working very well so far. But now, when I paste the link to the google photos album, i can…WordPress.org ForumsPHPをバージョンアップしてください
enomotoキーマスターBuddyPressは使ったことないのでわかりません m(__)m
BuddyPress+bbPressと組み合わせた場合の問題で、アカウントは残っているけど bbPress の権限がない状態と考えればよいのでしょうか?
bbPress のトピックや返信に対するお知らせメールの内容は以下の2つのフィルターフックを使えば制限できるようです
返信
$message = apply_filters( 'bbp_subscription_mail_message', $message, $reply_id, $topic_id );
トピック
$message = apply_filters( 'bbp_forum_subscription_mail_message', $message, $topic_id, $forum_id, $user_id );
また、送信するユーザーに対しては以下の2つのフィルターフックを使えば制限できるようです(複数ユーザーを BCC に登録するみたいなので、そこから特定ユーザーだけを除外)
返信
$user_ids = apply_filters( 'bbp_topic_subscription_user_ids', $user_ids );
トピック
$user_ids = apply_filters( 'bbp_forum_subscription_user_ids', $user_ids );
フィルターフックフックする関数を作成して、渡されてきたユーザーIDの配列からID毎に bbPress のフォーラム権限を取得して権限がなければそのユーザーIDを除外する等の処理を記述する感じになると思います。ただ、その時に BuddyPress のグループとどのように関係してくるのかがよくわかりません。
いずれにしても結構面倒な処理が必要となりそうな感じです
私ではこれ以上はよくわからないので、BuddyPress のフォーラム等で質問されたほうが良いかも知れません
enomotoキーマスターシングルサイトなら退会時にアカウントも削除しているはずなのでお知らせメールが送られるということはないと思いますが、マルチサイトだと、対象サイトへのアクセス権限削除のみでアカウント自体の削除までは行っていませんので、もしかしたらご指摘のようにお知らせメールが送られてしまうのかも知れません
マルチサイトの場合は、ちょっと複雑な動作でよく把握できていないのですが、とりあえず動作を再現できるか時間があるときに確認したいと思います。
もう少し詳しくフォーラムの構築状態や再現手順を教えて下さい
enomotoキーマスターご迷惑をおかけしています
500 エラーはサポートされていない機能を実行したとき等によくおこるので、単純に考えれば auto_prepend_file がサポートされていないという気がします
ただ、下記の記述が気になります
全く同じ仕様のWEBサーバーにインストールしている「 別の WordPress 内の YASAKANI cache v1.1.2 」にてエキスパートモードが正常に動作した
何か差異があると思うのですが(例えばインストールされているプラグインの違いやWordPress,PHPのバージョン等)
とりあえず php.ini に追加した auto_prepend_file 行を消していただければ通常のキャッシュモードに戻ります
私もエラーとなる原因を知りたいですが、今のところわかりません
何かわかったらまた返信します
enomotoキーマスター報告ありがとうございます
水を差すようですが、高速化はほんのわずかです (^^;
メリットは手軽にPHPへのゼロデイ攻撃をブロックできるようになるところですのでこちらも試してみてください
もしかしたらご使用中のプラグインの中でプラグイン内のPHPへダイレクトアクセスを行うようなものがあるかもしれませんのでそのようなプラグインの情報を共有できればと思っています
ちなみにログ情報を有効化しないとどのようなアクセスがあったか見れないのでちょっと遅くなりますがログを有効にしてみてください
ついでに ログ+統計情報を有効にしていただくと Celtispack にある人気記事のウィジェット(前日のランキング)も使えるようになるのでこちらもおすすめです
-
投稿者投稿