【解決!】error_logで書き出したログファイルをブラウザ上で確認すると文字化けする

phpでシステムを開発中に、「error_log」を用いてサーバ上にログファイルを書き出しました。

文字化け

確認の度にログファイルをダウンロードするのは面倒ですので、ブラウザ上で確認しようと「debug.log」にアクセスしたところ、文字化けしていました。これは困ります。

対処法

対処法は簡単です。

  1. 「debug.log」をダウンロードします
  2. 「debug.log」をテキストエディタで開きます
  3. 文字コードを「UTF-8」にします
    ※私の場合は、ダウンロードした時点でUTF-8でした
    ※debug.logはerror_logによって作成されたファイルです
  4. 「BOM」に変更します
    ※例として、サクラエディタの場合を後述します
  5. 「debug.log」を保存し、アップロードします(上書き)

以上です。これで文字化けが改善されます。

文字化け改善
新しいログも文字化けしません

サクラエディタの場合

サクラエディタよりキャプチャ引用

ログファイルを開いて、「名前を付けて保存」を押すと上のような画面が表示されます。すると青枠の部分で文字コードとBOMが設定できます。BOMはチェックを入れればOKです。

(参考)実際に私が使用したerror_log

error_log(basename(__FILE__).'('.__LINE__."):通過したよ\n",'3',__DIR__.'/debug.log'); // デバッグ用

「ファイル名(行数):コメント(改行)」というログを同ディレクトリの「debug.log」に書き出しています。

(余談)BOMとは

バイトオーダーマーク(byte order mark)の略です。実際に何ができるかというと、テキストの先頭に数バイトのデータを付与して、それを元に符号化の種類、今回の場合だと「UTF-8」と判断してくれるようになります。

今回は文字コードを「UTF-8」にして「BOM」にチェックを入れたので、「UTF-8」だと判別できるデータをテキストの先頭に数バイトで付与したということになるかと思います。それによって、ブラウザがUTF-8と判断でき、文字化けが改善できたのだと思います。

htmlやxml、phpなどは何の文字コードを使用するか指定できるので、BOMは使わない方が良いように思います。どちらが優先される?などの問題が発生しそうです。