var_dump()
で殆ど足りるけど、ログファイル等に出してみたい場合
$array = [
'test' => 'test',
1 => [],
true,
false,
null,
'object' => new stdClass(),
];
var_dump()と全く同じ文字列が欲しい場合は出力バッファリングを使用します。
(出力バッファリングのメモリが足りない場合は全て取得できないかもしれません)
ob_start();// 出力バッファリング開始
var_dump($array);// 出力処理 ここではバッファに載るだけで出力されない
$dump_string = ob_get_contents();// 出力バッファ取得
ob_end_clean();// 出力バッファをクリアし、出力バッファリングを終了する
// ob_end_flush()で出力バッファを直接出力することもできます。(変数に載せる必要がないのでその分メモリを抑えられる)
$fp = fopen(__DIR__.'/dump.log', 'a+');// 追記モード・ファイルが存在しない場合には、作成を試みます。
fputs($fp, $dump_string);
var_dump($dump_string);
string(174) "array(6) {
["test"]=>
string(4) "test"
[1]=>
array(0) {
}
[2]=>
bool(true)
[3]=>
bool(false)
[4]=>
NULL
["object"]=>
object(stdClass)#1 (0) {
}
}
"
var_export($array, true)
var_dump(var_export($array, true));
string(144) "array (
'test' => 'test',
1 =>
array (
),
2 => true,
3 => false,
4 => NULL,
'object' =>
stdClass::__set_state(array(
)),
)"
print_r($array, true)
var_dump(print_r($array, true));
string(157) "Array
(
[test] => test
[1] => Array
(
)
[2] => 1
[3] =>
[4] =>
[object] => stdClass Object
(
)
)
"
出力バッファリング
echoやprintf等の標準出力は毎回出力するのでなく、ある程度まとめてから出力する方が効率が良い。
出力をまとめて保持しておくためのバッファ機能だそうです。
デバッグでしか使わないかもしれませんがvar_dump,var_export,print_rも標準出力なので対象。
readfileも標準出力なので対象。
デフォルトはOffらしいのですが
CentOS7でPHP7.1をインストールしてみたところ以下の設定がデフォルトになっていました。
output_buffering = 4096
上記は最大バイト数
Onにすると無制限にバッファを使うことになるそうなのでメモリ不足になったりする可能性があります。
この場合は容量の大きいファイルの中身をレスポンスボディに出力してダウンロードさせる場合等に注意が必要だそうです。