2013-01-16 26 views
1

我的Magento system.log已滿,出現此錯誤: 注意:數組到字符串轉換位於1232行的/app/code/core/Mage/Core/Block/Abstract.php中。Magento日誌中的數組到字符串轉換錯誤

我增加這裏的代碼:(規則1232 $關鍵=破滅(「|」,$鍵);)

/** 
     * 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

那麼這是magento核心代碼,所以我確實希望從代碼外部進入$ key變量時會出現一些錯誤的值。

您可以嘗試記錄$ key變量並檢查它是否爲數組。

喜歡的東西:

法師::日誌(的print_r($關鍵,真正的),NULL, 'mycustomerror.log',真);

法師::日誌($鍵,空, 'mycustomerror.log',真);

如果您想要更好的答案,您應該告訴我們何時生成此通知以及您正在使用的模塊。

後額外的信息

那麼這是一個猜測,因爲你給我的信息並不多。但是你的日誌顯示以下內容:

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() 

當他們被引爆,他們將發出通知。

SEE: http://codepad.viper-7.com/qb5tIW

我會檢查CATALOG_PRODUCT_HIGHLIGHT(高光/產品/ grid.phtml)

,這樣的亮點/產品/ grid.phtml加載您可以瀏覽您的網站和看看這個調用是否真的把這個通知放到你的日誌文件中。

祝你好運!

+0

謝謝你的回答!我應該在哪裏放置這個法師代碼? – DutchTech

+0

我會把它放在行後面: // ksort($ key); //忽略順序 這將創建一個新的日誌文件,您可以在/ var/log/ – khoekman

+0

中找到好的,謝謝,我做到了。我已經添加了你的第一個代碼。現在我們必須等待新的日誌。 ;) – DutchTech

0

在注意到一次訪問我網站的主頁後,在system.log中發出了超過90條這條警告,我解決了khoekman的答案中推斷的嵌套數組問題。 我的Magento的版本是1.7.0.1

步驟1
創建路徑:app/code/local/Mage/Core/Block,然後CD到該目錄。

步驟2
複製摘要。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沒有奏效。修復這個bug是一個有趣的嘗試。

步驟5
保存然後關閉Abstract.php,然後在新文件中查詢到您的版本控制系統。
我使用git與merge --no-ff分支。