九尾空間

この世はとてもキュービックな空間ですね

久々にWordPressを入れてみてつまづいたこととか2

前回の記事の続きです。適当に色々つらつらと書き綴ってたらいつの間にか長くなってたので分けました。 …… というのは嘘で、実際には間違えて「投稿」ボタンを押してしまっただけです。はい

では、前回の記事の続きです。

blog.nil.nu

3. PHPがルートディレクトリを正しく認識してくれない

そういったいざこざのあった後 HHVMを入れようと格闘するにあたってportsを色々こねくり回してグチャグチャになっていたので、新しいVMを作りなおしました。ああすっきり、まるでトイレの後みたいな気分です。

普通にPHP7を野良ビルドして、initスクリプトをPHP5.6のportから取ってきて設定してあげたらあっさりと動きました。この時気づいたんですけど、今のPHPってopcacheが標準付属しているんですね。前インストールした時は別にビルドしてあげないといけなかった気がします。

次はpeclパッケージのインストールです。折角高速なPHPを使うんだし、ということでAPCuをインストールしました。安定版はインストール時のビルドでコケてダメだったので、ベータ版を入れたらなんとかなりました。もう一つimagickを入れたのですが、こいつが厄介でした (そんなに厄介ではないけど)。普通にpeclコマンドで入れられるパッケージはbeta版でもビルドでコケたので、imagickのgithubリポジトリをcloneしてきて、phpsevenブランチに切り変えてからビルドしてインストールしました。普通に問題なく動いてるのでここはそんなに問題ではありません。

さて、本題となる問題なのですが、「なぜかW3 Total Cacheの吐き出すnginx.confのlocationディレクティブがフルパスになる」というものです。他のサイトを見ているとちゃんとパブリックになってるルートからの相対パスになっているので、自分の設定がおかしいのか、はたまた変なエンバグかと結構悩まされたのですが、プラグインに手を加えてまで検証した挙句に同定した原因は、メインとなるnginx.confの以下の記述でした。

fastcgi_param PATH_INFO $fastcgi_script_name;

あっはい。完全に何も調べずコピペした自分のせいです。消したら正常に動きました。ちなみに以下の記述も0.8.30以降のnginxなら不要らしいです。include fastcgi_params; すれば全部設定してくれます。気になる人は一度fastcgi_paramsを覗いてみては。

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

4. W3 Total Cacheがサイトをminifyしてくれない

最後です。これが最高にして最大に僕を悩ませてくれた問題です。なぜか知らないけどW3 Total CacheがHTMLをMinifyしてくれないし、CSSJavaScriptのURLも圧縮済みのモノに変えてくれないし、色々悩まされました。

この問題を解決するに当たってヒントとなったのは以下のログです。このたった一つの警告を出していた主がこの問題の犯人でした (どこが原因か、もうお分かりですね)。

PHP Warning: Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /usr/home/nullkal/websites/kyubiverse/wordpress/wp-includes/functions.php on line 3297

結局、 lib/W3/Plugin/TotalCache.php にあるob_callbackの引数を &$buffer から$buffer に変えれば解決しました。

どうやら似たような問題が結構前にもあったらしいですね (https://wordpress.org/support/topic/warning-with-hhvm)。こっちはHHVMですけど。ここに書いてあった解決法がめちゃめちゃ役に立ちました。一年も経ってるのに直ってないとか何故…… 次のリリースで直すって言っているので、何らかの理由で差し戻しちゃったんだとは思うけど。

参考URL: https://wordpress.org/support/topic/php7-compatibility-3

終わりに

以上、今回のWordPress導入に当たって悩まされたことをつらつらと書き連ねてみました。今回色々経験してみるに、やっぱりWordPressはプログラミングができない人が使うものじゃないなーって感じがします。最適化とかする時にはバリバリチューニングして、キャッシュを効かせて爆速にできていいんですけどねぇ……。

自分でCMSを作ろうとか考えて色々作ろうとするとキリがなさそうなので、僕はWordPressと共に生きていきます。例えどんなにPHPがツラくても……。