PHPでログファイルを使ってデバッグする手順まとめ

PHPで画面出力する場合、次のような関数をよく使うと思います。

  • print_r
  • var_export
  • var_dump

手軽に変数の中身を表示したり、エラー内容を表示するのにはこういう関数は便利ですよね。

ただし、こういうブラウザ出力系の関数が使えないケースもあって、そういう時は外部ファイルへの出力によるデバッグが必要です。

そこでPHPでログファイルを使ってデバッグする方法をまとめました。

print_rなどでデバッグできないケースとは・・

まず冒頭で書いたブラウザ出力系の関数が使えない場合について少し説明します。

その典型的な例はAjaxでPHPスクリプトを呼び出したり、結果を受け取ったりする場合です。

 

例えばあるページからAjax経由で  hoge.php というPHPを実行するJSコードを書いたとしましょう。例えばシンプルなコードを書くなら次のような感じ

Ajaxでは呼び出し成功後のコールバック関数として done  メソッドというのが用意されています。このメソッドの引数 data  ではPHPから出力された内容を受け取れます。

このようなAjaxのコールバックで値受け取りしたいときは print_r  などはデバッグに使えません。

 

例えば呼び出し先の hoge.php  で次のようなコードを書いたとします。

上の処理ではAjaxから渡されたデータが 'hoge'  なら true  を、それ以外なら false  を返すという処理を書こうとしています。

が、途中の7行目でデバッグ用に出力してるのが問題です。

本来ならAjaxの done  関数には真偽値だけ渡したいんですが、デバッグしたせいで 'This is debug message'  という余計なデータまで含まれてしまいます。

 

こういう風にPHP側から何か値を返したいときはブラウザ出力系の関数は使えません。

この問題への対処法は外部(ログファイルなど)にデバッグ情報を出力してあげることです。

ログファイルでデバッグする手順

ここまで書いたようにAjaxを使っていると print_r  などでデバッグ不可です。

なのでそういう特殊な場合はログファイルにデバッグ出力する方法を使います。その手順について簡単にまとめると次の通り

 

まず次のような感じでドメイン直下の適当な場所にデバッグ用のファイルを作成します。

ここでは説明のためにドメイン直下に /data/log  ディレクトリを作成、その中に debug.txt  を配置するという構成にしてます。まあ構成については人それぞれですね。

 

そうしたら次のような専用のデバッグ関数を作成

やってることは file_put_contents  関数を使ってデバッグファイルに print_r  した結果を出力してるだけです。もちろん print_r  でなく var_export  や var_dump  を使ってもOK

ちなみに2番目引数に true  を渡すと今までのログ出力が全てクリアできます。

 

あとはPHPコードの好きな位置でこの関数を呼び出せばデバッグ可能

こうすれば出力用バッファを汚す心配が全くありません。いくらでも好きなようにメッセージとかデータの中身の確認作業ができます。

補足 : デバッグに役立つその他のテクニック

今紹介したログファイル出力以外にもデバッグに便利なテクニックは色々あります。

このブログでも色々紹介しているので興味のある方は次記事もどうぞ

デバッグ作業を便利にするのに役立つかもしれません。

ここまでのまとめ

もし何らかの事情があってPHP側で print_r  などが使えない場合、こういうファイル出力できる関数を作るとデバッグ作業が捗ります。

特にAjaxだとブラウザ出力系の関数はデバッグに使えないのでファイル出力必須かもしれません。

以上、PHPでログファイルにデバッグする方法についてでした。ではでは($・・)/~~~

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください