Magentoシステムのすべてのオブジェクトの内部を確認しようとしていますが、トップリンクテンプレートの内部から$ _links変数(すべてのページのヘッダーにリンクをレンダリングするために必要なすべての情報を含む)をvar_dumpしようとすると、私のサーバーは500エラーで応答します。誰もが理由を知っていますか?
7 に答える
Magentoオブジェクトのダンプは、再帰がなくても、すべてのEAVとキャッシュのものが存在するため、少し厄介になります。配列がある場合は、それらを個別にダンプする必要があります。
foreach ($_links as $object) {
var_dump($object->debug());
}
メモリエラーの可能性があります。Magentoのオブジェクトは巨大になる可能性がありvar_dump
、PHPのデフォルトの実装は、一部の循環参照についてはそれほど賢くありません。
xDebugのインストールは必須です。xDebugを使用すると、var_dump
関数が大幅にスマートになり、メモリ制限を使い果たしたエラーはほとんどなくなります。
Magentoは巨大なメモリホッグです。ほとんどの場合、使用可能なメモリが不足しています。
オブジェクト自体をvarダンプする代わりに、その->toArray()
メソッドを使用してオブジェクトデータをダンプします。注:すべてのMage_オブジェクトはこのメソッドを継承します。
このようなシナリオでは、PHPがエラーを吐き出し、ユーザーに表示するようにセットアップを構成しなかった場合に、HTTP500エラーが発生します。
エラーログ(のようなもの/var/lib/httpd/log/error_log
)を調べて、実際に何が起こっているかを確認します。
可能性は次のとおりです。
- 構文エラー
- 出力前にすでに送信されたヘッダー
- 巨大な変数の印刷によるメモリの枯渇
ほとんどの場合、これは$_links変数に多数の巨大なネストされたオブジェクトが含まれているためです。PHP用のxDebug拡張機能を試してください。これにより、var_dump出力を調整して、ネストレベルと表示データの量を制限できます。
$_link
変数は内部に膨大な数のオブジェクトで構成されているため、オブジェクトを出力するにはデバッグする必要があります
print_r($_link->debug());
(or)
var_dump($_link->debug());