特に大した改修をしていないのに、システムをstagingに反映したら、いきなり動作しなくなり、結構ハマった経験があったのでメモする。
Webページアクセスして、何も表示されない。 Responseコードを確認すると200だったが、「Gzipが不正よ」のようなメッセージが出た。
このレガシシステムはレスポンスをGzipする為、ob_start("ob_gzhandler");
を使っっている。
このGzip化したレスポンスの先頭数バイトを確認すると、EF BB BFというGzipではないフォーマットが入ったことがわかった。
この数バイトが吐き出されたのは、ソースコードファイルがUTF-8 with BOM
のエンコーディングで保存された原因がわかった。
使っていたEditorがSakuraという馴染みのないEditorのようで、UTF-8 BOM付で保存を設定したのだ。
全てUTF-8 BOM付のソースファイルを抽出し、BOMを消せば、正常に動いた。
grep -rl $'\xEF\xBB\xBF' .
sed -i '1 s/^\xef\xbb\xbf//' *.php