我的Magento system.log已满,但出现此错误: 注意:第1232行的/app/code/core/Mage/Core/Block/Abstract.php中的数组转换为字符串。
我在这里添加了代码:(规则1232是$ key = implode('|',$ key);)
/**
* Get Key for caching block content
*
* @return string
*/
public function getCacheKey()
{
if ($this->hasData('cache_key')) {
return $this->getData('cache_key');
}
/**
* don't prevent recalculation by saving generated cache key
* because of ability to render single block instance with different data
*/
$key = $this->getCacheKeyInfo();
//ksort($key); // ignore order
$key = array_values($key); // ignore array keys
$key = implode('|', $key);
$key = sha1($key);
return $key;
}
你知道出了什么问题,我需要改变什么吗? 提前谢谢!
答案 0 :(得分:0)
这是magento核心代码所以我确实希望从这段代码之外进入$ key变量有一些错误的值。
您可以尝试记录$ key变量并检查它是否为数组。
类似:
Mage :: log(print_r($ key,true),null,'mycustomerror.log',true);
或
Mage :: log($ key,null,'mycustomerror.log',true);
如果您想要更好的答案,您应该告诉我们何时生成此通知以及您正在使用的模块。
嗯,这是猜测,因为你给我的信息并不多。但是您的日志显示以下内容:
2013-01-17T16:52:36+00:00 DEBUG (7): Array
(
[0] => CATALOG_PRODUCT_HIGHLIGHT
[1] => 1
[2] => default
[3] => a058
[4] => 0
[5] => highlight/product/grid.phtml
[6] => 8
[7] => 4
[8] => Array
(
)
[9] => Array
(
)
[10] => Array
(
)
[11] => Aanbiedingen
[12] => highlight-special
[13] => special_from_date,special_to_date
[14] => -special
[15] => product_special
)
我认为问题是:
[8] => Array()
[9] => Array()
[10] => Array()
当它们发生内爆时,他们会发出通知。
查看:强> http://codepad.viper-7.com/qb5tIW
我会查看CATALOG_PRODUCT_HIGHLIGHT(突出显示/ product / grid.phtml)
您可以导航您的网站,以便加载突出显示/ product / grid.phtml,并查看此调用是否确实将该通知放入您的日志文件中。
祝你好运!答案 1 :(得分:0)
在注意到访问我网站的主页后,在system.log
中发出了90多行此警告,我解决了khoekman答案中推断出的嵌套数组问题。 我的Magento版本是1.7.0.1
第1步
创建路径:app/code/local/Mage/Core/Block
然后 cd 到该目录。
第2步
将Abstract.php从核心复制到本地:
cp ~/public_html/app/code/core/Mage/Core/Block/Abstract.php .
这是您为自定义修改“覆盖核心文件”的方式。
第3步
在您喜欢的编辑器中打开新文件~/public_html/app/code/local/Mage/Core/Block/Abstract.php
,向下滚动到第1232行:
从此改变:
$key = implode('|', $key );
于:
$key = $this->implodeRecursive('|', $key );
第4步
滚动到当前函数public function getCacheKey()
之上,然后在其上方的可用空间中,添加递归内爆函数:
// ckck: fix of system.log Notice: Array to string conversion in app/code/core/Mage/Core/Block/Abstract.php on line 1232
private function implodeRecursive( $_glue, $_arrIn ) {
$_arrTmp=Array();
if( count( $_arrIn ) > 1 ) {
foreach( $_arrIn as $key => $value ) {
if( is_string($value) || is_null($value) )
$_arrTmp[] = $value;
else
$_arrTmp[] = $this->implodeRecursive( $_glue, $value );
}
}
$_strReturn = implode( $_glue, $_arrTmp );
return $_strReturn;
}
通过反复试验,唯一可靠的测试是$value
是否为字符串。我常用的is_array()
或count() > 0
测试技巧不起作用。修复这个错误是一个有趣的尝试。
第5步
保存然后关闭Abstract.php
,然后将新文件签入您的版本控制系统
我使用带merge --no-ff分支的git。