var_dumpをテキスト化してログ出力する
PHPのデバックに重宝する関数が「var_dump()」です。
単数、配列などどのような形式でも変数の中身を画面に出力してくれます。
PHPが思うように動作しない場合など、変数の状態を調べるのには欠かせない関数です。
デバックが終われば、var_dump()関数は削除します。
そのままだと、不要な表示が出てしまうためです。
そんな中ふと思ったことがあります。
var_dump()をテキストログとしてログファイルに出力できないものか?
var_dump()で出力する内容を、テキストログで出力することができれば、その都度var_dump()の記述を埋め込んだり、削除したりする必要がなくなります。
また想定外エラーが発生した箇所に使用できれば、様々な情報を拾い上げることができ、問題解決に役立ちます。
var_dump()は便利ですが、画面にしか出力できないのが欠点です。
そこで、何とかできないか探しました。
画面出力をバッファリングする関数がありました
PHPはよくよく調べるとかゆいところに手が届く関数が準備されています。
そこで早速サブルーチン化してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// サンプル配列 $data = array("id"=>1, "date"=>"2020-09-15", "comment"=>"テストデータ"); // var_dumpをログ出力用にテキスト化 $log_text = var_dump_text($data); function var_dump_text($text) { // ①画面出力バッファリング開始 ob_start(); // ②var_dump実行 var_dump($text); // ③バッファリングした内容をテキストとして出力 $out_text = ob_get_contents(); // ④画面出力バッファリング終了 ob_end_clean(); // ⑤取得したテキストを返す return $out_text; } |
これでvar_dump()の出力内容を、テキストデータとして保存することができるようになりました。
もっと詳しく解説いたします
コーディング例だけだとよくわかりにくいですので、詳しく解説いたします。
使用する関数は以下の通りです。
- ob_start() 画面出力のバッファリングを開始する
- ob_get_contents() 画面出力バッファリングデータを変数に詰め込む
- ob_end_clean() 画面出力バッファリング情報を初期化し、バッファリングを終了する
(1)仕組み
①ob_start()~④ob_end_clean()の間で画面に出力された情報をバッファリングします。
①ob_start()~④ob_end_clean()の間で、var_dump()、echo等を実行しても画面には出力されず、バッファリングされます。
③ob_get_contents()を実行すると、その時点でバッファリングされている内容がテキストデータで変数に出力されます。
(2)コーディング例の解説
①ob_start
バッファリングを開始します。
これ以降の画面出力処理がバッファリングされます。
②var_dump
var_dump()関数を実行して内容をバッファリングします。
③ob_get_contents
バッファリングした内容を変数に出力します。
④ob_end_clean
バッファリングを終了します。
これ以降画面に出力されるようになります。
よいプログラムはログをキチンととることで生まれます
プログラム開発には、デバッカーと呼ばれるソースを見ながらプログラムを実行できるツールがあります。
ただ、phpには今のところそのようなツールはありません。
本番サーバーでチェックする場合はなおさらです。
そんな時に役立つのがログです。
普段からログを見れば何が起こったかわかるようにしておくことで、気づかない問題点等を見つけ改善してゆくことができます。