phpがエラーログを全然出してくれなくてハマった件

このwordpressはnginx , php , php-fpm , APCで動かしているのですが、以前ふとした瞬間に (正確に言うと、ちょこっとだけfunction.phpを書き換えた瞬間に) 画面が真っ白になった経験があります。

まぁ、いつもの事でphpのどっかに ; が足りてないだとか、ふつうの構文エラーだろうと思ってnginxのエラーログを見ようとしたのですが

・・・・どこにもエラーが出てないやんけ

と驚き、いろいろ探ってみました。

まず、php-fpmなのですがプロセスによって出力先のエラーが違うという事を知りました。

プロセス? は? と思ったのですがpsコマンドで見てみると

# ps aux | grep php-fpm
 root     30742  0.0  0.4 365952  4096 ?        Ss   21:16   0:00 php-fpm: master process (****)
 nginx    30743  0.0  0.3 365952  3912 ?        S    21:16   0:00 php-fpm: pool www
 nginx    30744  0.0  0.3 365952  3912 ?        S    21:16   0:00 php-fpm: pool www
 nginx    30745  0.0  0.4 365952  4772 ?        S    21:16   0:00 php-fpm: pool www
 nginx    30746  0.0  0.3 365952  3912 ?        S    21:16   0:00 php-fpm: pool www
 nginx    30747  0.4  4.9 390268 50808 ?        S    21:16   0:00 php-fpm: pool www
 nginx    30752  0.0  0.3 365952  3916 ?        S    21:16   0:00 php-fpm: pool www

と、マスター(親)プロセスとワーカー(子)プロセスに分かれて動いています。

さらにワーカーのログ出力先の設定は php-fpm.d/www.conf の以下で定義されてました。

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Default Value: no
catch_workers_output = yes

こちらの項目がコメントアウトされていたので、yesに設定。
こうすることで、マスターのログにリダイレクト可能だそうです。

/etc/init.d/php-fpm restart

で、反映させたところ無事以下のエラーログに全部のエラーが出力されました。

/var/log/php-fpm/error.log

ただ、 /var/log/php-fpm/の下にwww-error.logなるものが生成されており 「ワーカーのログってこっちじゃないのかしら??」 と何度も疑い、デフォルトで apache:apacheになっていたのを nginx へ変更したり、パーミッションを変えたりと あれこれやりましたが全然ダメ。

この辺はいつかまた調査したいと思います。

あと、phpのエラーレベルがnoticeだと、wpのNOTICEが めっちゃめちゃ出ますね 今まで見てなかったので驚きでございました。   おわり。

2012-07-31 | Posted in Word PressNo Comments » 


関連記事

Comment





Comment



*