APC と WP Super Cache を導入してからしばらくしたら、「Wordpressが真っ白で見れない!」と言われました。エラーメッセージも何も出ないっぽい。なんぞ?とちょっと調べた。
エラーメッセージが出ないのは単に wp-config.php でエラーメッセージの抑制してたからでした、はい。開発中は表示する様にしましょう。
そして出てきたエラーメッセージは以下の文言
Fatal error: Internal Zend error - Missing class information for in /hoge/fuga/piyo/wp-cache-base.php on line 5
よくわからんのでぐぐったら、APC でクラスをうまくキャッシュできないみたいな感じの文言が見つかったり見つからなかったりする。原因はよくわからんが対処法は見つかった。
このエラーに対処する際、大抵以下の様な方法で解決を試みてる様だ。
WordPress › Support » SuperCache "Internal Zend error" WTF?以下のように、apc.ini に APC を無効にするスクリプトの名前を記載しておけば良いらしい。
$ sudo vim /etc/php5/conf.d/apc.ini
extension=apc.so
apc.filters = wp-cache-config
apc.include_once_override = 0
ところが俺の環境ではこれでは解決しなかった。APC も WP Super Cache も使いたいので WP Super Cache の ソースコードを読む事にした。
以下がクラスが云々といわれてエラーが出る箇所。
/example/wp-content/plugins/wp-super-cache/wp-cache-base.php
<?php
$known_headers = array("Last-Modified", "Expires", "Content-Type", "Content-type", "X-Pingback", "ETag", "Cache-Control", "Pragma");
if (!class_exists('CacheMeta')) {
class CacheMeta {
var $dynamic = false;
var $headers = array();
var $uri = '';
var $post = 0;
}
}
?>
このクラス、wp内を grep してみたが何処でも使ってない。なんであるのかよくわからない、試しにコメントアウトしたらエラーも出ずにちゃんと動いた。なんぞ?
というわけでこのクラス情報削除したら動きます、はい。もちろん WP Super Cache がアップデートしたらどうなるかわかりませんけど。