enable-zend-multibyte

初のはてな日記が障害調査の経緯とは。


■現象

PHPで構築したWebアプリが、使用を続けていると突然parse errorを出して動かなくなる。

突然、なんて言葉は使いたくないんだけど、今のところそうとしか言いようがない(´・ω・`)

                                                                                                                                  • -

Parse error: parse error, unexpected T_STRING in x[ファイル名]x

                                                                                                                                  • -

・リロードしても変化なし。
・同サーバで動くWebアプリ build by PHP 全てに影響する。
apache再起動で正常動作に戻る。


■調査方針

・エラー発生時にphpinfo()の挙動はどうなるか?←未確認
・サーバ・プログラム変更がない運用状態からのparse error発生に関して調査。
・再現性の有無(頻発するものの原因が掴めていない)


XOOPSの導入事例に似たような現象が散見される。

原因として挙げられているのは、configure時のオプション「--enable-zend-multibyte」の存在。
これを外して再makeすれば直るとのこと。

ただ、同オプションを付与したサーバは他にもあるんだけど問題は起こしていないんだよね…。


■疑惑の種
そこで思い至ったのは、そもそも「zend-multibyte」って何さ?という話。
軽く調べた感じでは、PHPスクリプトをShift-JISで記述できるようにするための設定とのこと。
php.iniの設定項目である「mbstring.script_encoding」を使うためのようです。

…で、これがどうしてメモリ管理と競合するんだろう???


<追記:2008/10/17>

解決策に辿り着けずしばらく放置していたんですが、俄かに該当サーバの使用頻度が高まったため再調査です。
検索したところ、以前よりもヒットする情報がありました。

http://okwave.jp/qa4349618.html
↑で紹介されていた、.htaccessphp.iniの設定値「mbstring.script_encoding」の値を書き換える対応を行いました。

ソースコードUTF-8で記述しているため、

                                                                                  • -

php_value mbstring.script_encoding UTF-8

                                                                                  • -

を各ツールのディレクトリに設置しました。

現在、仮運用中ですが問題がなければこのまま本運用としたい所存です。

…エラー報告の間隔は減った気がします。無事にいきますように(-人-)