数组到字符串转换错误在Magento日志中

我的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;
    }

你知道发生了什么问题,我需要改变什么? 先谢谢你!


那么这是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(highlight / product / grid.phtml)

您可以浏览您的网站,以便加载highlight / product / grid.phtml并查看此调用是否确实将该通知放入日志文件中。

祝你好运 !


在注意到访问我网站的主页后,在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()上方,然后在它上面的空闲空间中,添加递归implode函数:

//  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没有奏效。 修复这个bug是一个有趣的尝试。

第5步
保存并关闭Abstract.php ,然后将新文件签入到您的版本控制系统中。
我使用合并--no-ff分支的git。

链接地址: http://www.djcxy.com/p/45067.html

上一篇: Array to string conversion error in Magento logs

下一篇: squash` does not add "Merge" header to commit