PHP開発・デバッグ用の便利なログ出力関数を作ってみた
PHP開発者用に役に立つログ出力関数を作ってみました。 画面上に出力したり、ログファイル上に出力したり、FireBug上に出力できたりします。
デバッグが不便なPHP
PHPの開発におけるデバッグは、対象がサーバーのため、クライアントサイドの開発よりも面倒になってしまうものですよね。
そこで、PHPの開発・デバッグ作業で値を状況に合わせていろいろなところにテスト出力できると便利です。 たとえば以下のような出力先とかですね。
値をテスト出力できたらいいな~と思う出力先
- 出力ページ上
- サーバーのログファイル上
- Firebugのコンソール上
これらに値を自由に出力できるユーティリティ関数「printarray」を作ってみました。 普段の開発でもよく使っているので、みなさんのお役に立てば幸いです。
使用前準備
ログファイル上に出力したい場合はprintarray関数を使う前にログファイルのパスを定義しておきます。
また、PEAR::Logライブラリも前もって読み込んでおきます。 Pear::Logのインストール方法についてはこちらを参照してください。
define('MY_LOG', '/path/to/log.txt'); require_once('Log.php');
printarray関数
使いかた
- 1番目の引数はprint_r()に渡す値と同じものを渡します。
- 2番目の引数(オプション)に”log”を指定するとPEAR::logで生成したシステムログファイルに書き込まれます。デフォルトはページ上に<pre>タグを付加して内容を出力します。 ”firebug”を指定すると、Firefoxのアドオン「Firebug」のコンソールウィンドウに内容を出力します。
/** * 開発用 配列・オブジェクト出力関数 * 2番目の引数に"log"を指定するとPEAR::logで生成したシステムログファイルに書き込まれます。 * また、"firebug"を指定すると、FireBug上のコンソールに出力されます。 * * @param array $ar 出力したい値(配列、オブジェクトなど) * @param string $output 出力先(オプション) */ function printarray() { $ar = func_get_arg(0); if (func_num_args()==1) { if (!headers_sent()) header('Content-Type: text/html; charset="utf-8"'); print("<pre>"); print_r($ar); print("</pre>"); } else { if (func_get_arg(1) == "log") { if (gettype($logger) != 'object') $logger = &Log::singleton('file', MY_LOG); $logger->log(print_r($ar,true), PEAR_LOG_DEBUG); } else if (func_get_arg(1) == "firebug") { if (gettype($flogger) != 'object') $flogger = &Log::singleton('firebug', '', 'PHP', array('buffering' => true), PEAR_LOG_DEBUG); $flogger->log(print_r($ar,true), PEAR_LOG_DEBUG); } } }
2009-12-20