PHP5.4あたりでmb_ereg_matchとかmb_convert_kanaとかこの辺のマルチバイト変換系のやつがエンコード指定しないとまともに動かなくなったようで、いままでPHP.iniの内部エンコードを指定してないでデフォルトEUCだけどなんかしらんけどよろしくやってくれたのがやってくれなくなっていて、これがなんだかんだで一番ハマる。
まともにやるなら
- mb_ereg_matchする前にmb_regex_encodingでエンコーディング指定する
- mb_convert_kanaするときは最後の引数にエンコーディング指定するか、mb_internal_encodingで指定する
でやる必要があるんだと思う(普段まったくPHP使わないので詳しいことはよく知らない)
今回の場合はPHP.iniを容赦なくいじれたので、デフォルトの内部エンコーディングをいじって対応した。
mbstring.internal_encoding = Shift_JIS
これ以外の問題としては、ワーニングが死ぬほど出るので、大局に影響しないと判明したものに関してはerror_reportingで軒並みフィルタした。
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
あとは運悪くORACLEを使ってたりするとOCIのDLLが変わってたりするのでその辺対応すればだいたい動くのではないかと思われる。