xdebug var_dumpを取得して完全なオブジェクト/配列を表示する方法


310

私が使用していますxdebugの上(php_xdebug-2.1.2-5.3-vc9.dll)をWAMPvar_dump大きなオブジェクトまたは変数で使用すると、変数全体が表示されません。

array
'node' => 
  array
    'my_form' => 
      array
        'form' => 
          array
            ...

xdebugを使用しないと、期待どおりに表示されます。ドキュメントを確認しましたが、解決策が見つかりませんでした。xdebug var_dump完全なオブジェクトを表示するように、これを修正する方法を誰かが知っていますか?


print_rは、すべてのネストされた値を含む完全な配列を出力します。
Rashmi Jain

回答:


603

これらはphp.iniの設定可能な変数です:

; with sane limits
xdebug.var_display_max_depth = 10
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 1024 


; with no limits
; (maximum nesting is 1023)
xdebug.var_display_max_depth = -1 
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1 

もちろん、これらは実行時にを介して設定することもできini_set()ます。php.iniを変更してWebサーバーを再起動したくないが、何かをより深く詳しく調べる必要がある場合に便利です。

ini_set('xdebug.var_display_max_depth', '10');
ini_set('xdebug.var_display_max_children', '256');
ini_set('xdebug.var_display_max_data', '1024');

Xdebugの設定については、公式ドキュメントで説明されています


19
あなたが実際にあなたから情報を得ることを期待するならば、私display_max_depthは5 のa は正気ではないと主張しますvar_dump
ベン・ハロルド

2
@BenHarold設定として何を勧めますか?
AnriëtteMyburgh

6
@AnriëtteMyburghそれは本当にあなたのコードに依存します。非複雑な配列またはJSONは5〜10で十分ですが、Symfonyフレームワークオブジェクトを詳細に調べたい場合は、制限がない方がよいでしょう。すべてに対応できる提案はありません。
Michael Berkowski、2015年

3
過去6か月間にこの回答を10回以上訪れました。マイケル・バーコウスキーさん、ありがとうございます。
リンカーンベルジソン2017

2
@LincolnBergeson私もいつも自分で調べなければならない。
Michael Berkowski、2017

38

私はこれが非常に古い投稿であることを知っていますが、これはまだ役立つかもしれないと考えました。

json形式の読み取りに慣れている場合は、var_dumpを次のように置き換えることができます。

return json_encode($myvar);

これを使用して、いくつかの深くネストされた配列を持つ、私が構築しているサービスのトラブルシューティングに役立てています。これにより、何も切り捨てたり、php.iniファイルを変更したりすることなく、配列のすべてのレベルが返されます。

また、json_encodedデータは文字列であるため、簡単にエラーログに書き込むことができます

error_log(json_encode($myvar));

それはおそらくすべての状況に最適な選択ではありませんが、それは選択です!


12
私はこの答えが大好きです。また、次のようなきれいなhtml出力がある場合もあります。return '<pre>'。json_encode($ myvar、JSON_PRETTY_PRINT)。 '</ pre>';
David

7
すべての変数がjson_encodeableであるとは限らないことに注意してください。jsonserializableインターフェースを実装しないオブジェクトは、空の配列「{}」を返すだけです
KristianSandströmJul

2
また、json_encodingはタイプを表示しないため、何かが適切に一致するかどうかを識別するのはさらに困難です。
SEoF 2016年

13

または、別の方法を使用できます。

https://github.com/kint-php/kint

ゼロ設定で動作し、Xdebugのvar_dumpよりもはるかに多くの機能を備えています。Kintを使用してネストされた制限を即座にバイパスするには、次のコマンドを使用します

 +d( $variable ); // append `+` to the dump call

12

私はこれが遅いことを知っていますが、それはいくつかの役に立つかもしれません:

echo "<pre>";
print_r($array);
echo "</pre>";

21
print_r()はvar_dumpの代わりにはなりません
AnrDaemon 2016

素晴らしい答え。ありがとう。
PHPst 2018

@AnrDaemon真剣に?
PHPst 2018

var_dump([false]); print_r([false]);
AnrDaemon

私はこれが遅いことを知っていますが、-print_r()は、必要に応じてvar_dump()の完全な代替になる可能性があります!配列の構造を表示することがよくあり、IMOのprint_r()はvar_dump()よりもはるかに優れているため、var_dump()を使用することはほとんどありません。
bestprogrammerintheworld


3

お勧めしたいのvar_export($array)ですが、タイプは表示されませんが、コードで使用できる構文が生成されます:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.