WordPressで APCu を使うときに管理画面が固まる現象を解消する
xreaでphp7.0にして、よかったことがOPcacheとAPCuが使えるようになったことです。
これを機にせっかくあるAPCuの機能をフルで使おうと、
WordPress.org 日本語
APCu Object Cache Backend
An object-cache implementation using the APCu extension.
どうもプラグインの相性が悪いのか、管理画面で、すぐに前のキャッシュを持ってきて、プラグインの変更がちゃんと出来なかったり、一回目のクリックでは動かなかったりと、相性がとても悪かったのです。
使うのをやめようかと思ったときもありましたが、せっかくある機能を有効に使わないのはよくないと思いなんとか方法を考えていました。
一時期は、
WordPress.org 日本語
YASAKANI Cache
Simple ! Easy !! Ultra-high-speed !!!. Definitive edition of the page cache. And Bot and Security Utility.
で、やっぱり「object-cache.php」を使うのをやめられないかと考えた末に、管理画面にログインしているときは、「object-cache.php」を削除し、ログアウトするときに「object-cache.php」を復活させればいいのでは、と考えました。
早速テーマフォルダの「functions.php」に
//object-cache.phpをログイン時に削除しログアウト時に復活させる方法
add_action( 'wp_login', 'remove_object_cache_file', 10, 2 );
add_action( 'wp_logout', 'add_object_cache_file', 10, 2 );
function remove_object_cache_file ( $user_login , $current_user ) {
$file = WP_CONTENT_DIR . '/object-cache.php';
unlink($file);
return;
}
function add_object_cache_file() {
$from = dirname( __FILE__ ) . '/object-cache.php';
$to = WP_CONTENT_DIR . '/object-cache.php';
copy( $from, $to );
return;
}
を記入してアップロード、同じフォルダに、「object-cache.php」もアップロードしたところ、ちゃんと管理画面にログイン中は、「object-cache.php」が消えていて、ログアウト後に「object-cache.php」が「/wp-content/」に作成されているようになります。
これで、なんとか管理画面の変な挙動を押さえることが出来るようになりました。
追伸:管理人1人、ユーザーを作らせない設定だから、このやり方で上手くいくと思います。ユーザーがたくさんいるサイトには不向きな設定ではないかと思います。
コメント一覧
YASAKANI Cache の作者です
APCu なかなか使いこなしが難しいですよね
私もキャッシュプラグインの一部で活用していますが、環境によりうまくいったりいかなかったりで調べると
FastCGIのPHPだとこんな制限があります
http://ja.phptherightway.com/#caching
このページでこんな記述をみつけ納得しました
PHPを(Fast-)CGIアプリケーションとしてウェブサーバーで実行するときには、 すべてのPHPプロセスが自身のキャッシュを持つことになる。つまり APCuのデータもワーカープロセス間では共有されないということだ
つまり、複数のプロセスが起動されるとプロセス間で APCu データの共有が出来ないので予想外の動作となることがあるということ、使い方次第ですがクセがすごい
ちなみに YASAKANI Cache はログインユーザーにはキャッシュの出力は行いませんし、記事更新時は、自動的にそのページのキャッシュをクリアしているので変更がすぐに反映されないということはないはずです (^^)
わざわざこんなサイトにまで来ていただきありがとうございます。
よくわからず、「変更がすぐに反映されないのはちょっといやだった」てな事を書いてしまい申し訳ありません。
ただ自分には合わなかったので、惜しいですがやむなく使うのをやめました。
なかなか厄介者のAPCuを使おうと考えているのでこれからもアドバイスお願いします。