Php 为什么var_转储(数组)会导致Magento中出现500错误?

Php 为什么var_转储(数组)会导致Magento中出现500错误?,php,magento,var-dump,Php,Magento,Var Dump,我试图查看Magento系统的所有对象内部的内容,但是当我尝试从top links模板内部var_转储$_links变量(包含呈现每个页面标题中的链接所需的所有信息)时,我的服务器会响应500错误。有人知道为什么吗?在大多数情况下,这是因为$\u links变量包含许多巨大的嵌套对象。尝试用于PHP的xDebug扩展-它允许调优var_dump输出,以限制嵌套级别和显示数据量。Magento占用大量内存。最有可能的是,您的可用内存不足 使用对象的->toArray()方法转储对象数据,而不是va

我试图查看Magento系统的所有对象内部的内容,但是当我尝试从top links模板内部var_转储$_links变量(包含呈现每个页面标题中的链接所需的所有信息)时,我的服务器会响应500错误。有人知道为什么吗?

在大多数情况下,这是因为$\u links变量包含许多巨大的嵌套对象。尝试用于PHP的xDebug扩展-它允许调优var_dump输出,以限制嵌套级别和显示数据量。

Magento占用大量内存。最有可能的是,您的可用内存不足


使用对象的
->toArray()
方法转储对象数据,而不是var转储对象本身。注意:所有Mage_uu对象都继承此方法

HTTP 500错误将发生在这样的场景中,当PHP抛出错误时,您没有配置设置以向用户显示错误

查看错误日志(类似于
/var/lib/httpd/log/error\u log
)以了解实际发生的情况

可能性包括:

  • 语法错误
  • 在输出之前已发送标头
  • 打印大变量导致内存耗尽

Magento对象的转储会有点混乱,即使没有递归,也会有所有的EAV和缓存内容。当您有一个阵列时,您需要单独转储它们:

foreach ($_links as $object) {
    var_dump($object->debug());
}

可能是内存错误。Magento的对象可能很大,PHP中默认的
var_dump
实现对于一些循环引用来说并不那么聪明


安装是必须的。有了xDebug,
var\u dump
函数变得更加智能,内存限制耗尽的错误基本消失。

$\u link
变量包含大量的对象,我们需要调试以打印对象

print_r($_link->debug());
(or)
var_dump($_link->debug());
我解决了我的var_转储(数组)导致Magento2出现500错误的问题,如下所示(可能有人帮忙)

//app/code/MyCompany/Shipping/view/adminhtml/templates/order/view/items.phtml

foreach ($_items as $_item):
    echo "<pre>";
    var_dump($_item->debug());
    echo "</pre>";
foreach($\项作为$\项):
回声“;
var_dump($_item->debug());
回声“;
样本输出:

这可能有多种原因。请检查服务器错误日志。另外,请检查您的PHP错误日志。这可能是页面中稍后出现的“headers allready sent”错误吗?发现了问题,内存耗尽(请参阅下面的评论)。您是对的,对不起,我检查了它们并接受了一些。
var\u dump
不会因递归而阻塞,它只是显示了递归**而不是递归成员。我尝试安装xDebug,但在扩展文件夹中我已经找到了一个名为xDebug.so的文件。xdebug是否预装了OS X?我正在使用MacOSXLion的内置Web服务器。我还在我的php.ini中添加了一行“extension=xdebug.so”,但是现在我得到了一个空的200响应。找到了问题,apache错误日志显示“允许内存大小为268435456字节(…)”,所以打印任何此类对象都不是一个选项?我发现了问题,我上面的评论解释了这一点。当我已经在/usr/lib/php/extensions/?xDebug中看到xDebug.so文件时,如何安装xDebug是必须的,但只能在dev/local env上安装。请不要将这样的工具放在生产服务器上。显然,我已经安装了xdebug,它显示在我的phpinfo()输出中。所以打印整个数组不是一个选项。@pancake请确保设置了此处提到的PHP.ini设置。如果您使用var_dump(“test”),您就会知道您正在使用xDebug的var_dump;在浏览器中,您可以看到未转义的html标记(xDebug为您转义)。调整xdebug.var_display_max_子项、xdebug.var_display_max_数据和xdebug.var_display_max_depth应该可以让您安全地转储95%的数据结构。对于任何需要知道的人来说:我接受了这个答案,因为它是有效的,也是最容易实现的解决方案。我认为xDebug也可以解决这个问题,但不知怎么的,它已经出现在我的系统上了(但不确定它是否在php中处于活动状态)。如果你刚刚找到一个简单的解决方案,你也可以直接转储到一个文件,例如
错误日志(print\r($\u links,true),3,'my.log')
或类似的文件。有时我自己在需要转储超大的Magento对象时使用它。很好,它适用于我使用的代码下面的vew phtml文件