LoginSignup
3
2

More than 5 years have passed since last update.

PHPで変数の中身を文字列で表示させる

Last updated at Posted at 2018-03-19

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も標準出力なので対象。

output_buffering

デフォルトはOffらしいのですが
CentOS7でPHP7.1をインストールしてみたところ以下の設定がデフォルトになっていました。

output_buffering = 4096

上記は最大バイト数

Onにすると無制限にバッファを使うことになるそうなのでメモリ不足になったりする可能性があります。
この場合は容量の大きいファイルの中身をレスポンスボディに出力してダウンロードさせる場合等に注意が必要だそうです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2