我正在尝试调试Magento中的PayPal审核流程。每当我尝试转储以下变量时,我都会得到一个白页:
//the variable declaration:
$shippingAddress = $this->getShippingAddress();
//the dump that breaks the page:
<?php echo '<pre>';print_r($shippingAddress);echo '</pre>'; ?>
我还尝试在页面上使用一个变量而不是if语句。
//this variable displays results
<?php echo '<pre>';print_r($billingBlock->setShowAsShippingCheckbox(true)->toHtml());echo '</pre>'; ?>
//however, this one does not:
<?php echo '<pre>';print_r($billingBlock);echo '</pre>'; ?>
我只是想知道什么可能导致我的var_dump破坏页面?如果我不能转储它,我如何看到对象中的内容?
答案 0 :(得分:11)
首先,PHP从不“只是白页”。当你得到一个空白屏幕时,这意味着PHP的执行因某种原因而停止。但是,除非您的服务器已配置为不记录错误,否则PHP错误日志或Magento异常日志应该有错误。
就您的具体问题而言,许多Magento的对象都包含对大量信息的引用 - 有时引用是循环的。 PHP的var_dump
和print_r
函数将盲目地遵循这些循环引用并尝试打印出所有内容。这最终会导致PHP使用的内存超过memory_limit
ini设置所允许的内存,并且执行暂停。
大多数PHP专业人员使用xDebug扩展来解决此问题。 xDebug扩展名具有修改后的var_dump
,它将限制转储的信息量,从而防止出现上述内存限制问题。如果xDebug仍无法解决内存限制问题,则xdebug.var_display_max_children
,xdebug.var_display_max_data
和xdebug.var_display_max_depth
ini设置是您要调整的设置。 (一些PHP发行版最初设置得太高了)
如果这不可能,那么var_dump
的一点点谨慎仍然有帮助。
用它来计算变量类型
var_dump(get_class($thing));
如果它是Magento对象,请使用此对象查看其数据键
var_dump(array_keys($thing->getData()));
然后使用
输出单个数据成员var_dump($thing->getData('key_name'));
var_dump($thing->getKeyName()));
答案 1 :(得分:0)
PHP解析和致命错误会产生这种情况。您可能需要查看错误日志。
您可以尝试将以下行添加到php文件的开头(在打开PHP标记之后)
ini_set('display_errors',1);
error_reporting(E_ALL);