2011年7月30日土曜日

PHP print_rに第二引数あったのね

超今更ながら、print_rに第2引数を渡せるのを知った。
TRUEを渡すと出力はしないで、string返してくれる。

そんだけです。


そんだけなんだけど、一応どんな感じで使ったかも書いとくと、配列のログ出力が簡潔になった。
出力バッファリングを有効にしてやって、バッファリング内容を表示ってやってたので。
<?php

$arr = array('a'=>'hoge', 'b'=>'fuga');

ob_start();
echo "var_dump: ";
var_dump($arr);
error_log(ob_get_contents());
ob_end_clean();

error_log("print_r: " . print_r($arr, true));
上のvar_dump(別にprint_rでもい)の出力が今までやってた方法で、下が今回覚えたprint_rの第二引数使ったもの。
4行が1行に!! 簡潔にかけて便利じゃ。下記注意があるので、内部的には同じようなことをやってるんだろうけど。
注意:
return パラメータを使う場合、この関数は内部的に出力バッファリングを使います。そのため、ob_start() コールバック関数の中では使えません。

で、ログはこんな感じに出力されると。sedで改行コードを改行に置換してやると見やすいね。
$ tail -f /var/log/apache2/error.log | sed 's/\\n/\
/g'
[Sat Jul 30 14:38:02 2011] [error] [client 127.0.0.1] var_dump: array(2) {
  ["a"]=>
  string(4) "hoge"
  ["b"]=>
  string(4) "fuga"
}

[Sat Jul 30 14:38:02 2011] [error] [client 127.0.0.1] print_r: Array
(
    [a] => hoge
    [b] => fuga
)