LifeType 1.1.3 Referer Bug Fix

萬分感謝 jesse 長輩的提醒, 從 Planet DebianTW 連過來的都無法看到正常頁面, 而是看到下述 Error Message:

"Catchable fatal error: Object of class Article could not be converted to string in /path-to-file/class/database/db.class.php on line 402"

目前搜尋到的只有一篇有寫此問題Lifetype 1.1.3 summary.php redirect problems, 但是此篇看下去還是無解, 只好自己修了.. :~

應該也不能說無解, 看到他說如果關掉 Template Cache 就解決了,  確實這樣子就能搞定, 但是 並不是好解法就是了.. 🙁

照那篇文章的解法: 全部站台管控 -> 模版設定 -> template_cache_enabled 選 "否" 即可.

以下就來寫寫修復此 Bug 的方法...

這個錯誤訊息從 db.class.php 的 402 行看到是 $string = stripslashes($string);, 然後把這行註解掉, 但是再執行下去都是一樣的問題, 於是只好仔細看一下錯誤訊息了, (都想說遮著眼睛就當看不見... XD)

看錯誤訊息寫的意思是, 那個 $string 的變數, 是一個物件, 不能被轉換成 string, 猜想應該是某個地方呼叫 qstr() 的 function, 但是傳的東西不是字串, 而是把物件丟進來了.

於是就在 class 下 grep qstr 看看, 發現有一卡車的地方都用到 qstr()... 真苦.. Orz..

只好來追追看, 平常時, 我在正常使用下, 都沒有此錯誤訊息, 於是猜想應該是 Referer 的問題(只有從外面其它站連過來才會看到此 Error), 於是找到 dao/referers.class.php 這個檔, 然後在此檔中插旗子找一下, 發現是 addReferer() 這 function 內部中, 有兩個 UPDATE 的語法, 裡面有用到 qstr(), 主要是 Db::qstr($articleId) 這個 $articleId 是物件(這邊應該是字串才對), 找到問題在此.

於是再來 grep addReferer, 發現只有下述兩個檔案有用到:

  • action/blogaction.class.php: $referers->addReferer( $_SERVER['HTTP_REFERER'], 0, $this->_blogInfo->getId());
  • action/viewarticleaction.class.php:  $referrers->addReferer( $_SERVER['HTTP_REFERER'], $articleId, $this->_blogInfo->getId());

看 addReferer() 是第二個參數丟進 $articleId, 這邊也很明顯的看出問題應該是在 action/viewarticleaction.class.php 上, 因為 action/blogaction.class.php 第二個參數是丟 0, 也推論它應該不是丟物件進此 function, 而是應該丟一個數字(或字串)進去, 所以應該在 action/viewarticleaction.class.php .

然後再試著 grep  _updateArticleReferrersById 這個 function, 發現到這個傳進來的參數應該本來就是數字(或字串), 在 grep 時就看到 $this->_updateArticleReferrersById($id);, 於是把這行的 $id 印出來看看, 發現這是 Object, 此問題的源頭就是這個(此行在 _updateArticleReferrersByTitle 的 function 中, 112 行).

以上講一堆東西, 看不懂就別看了, 純粹記錄一下自己是怎麼修的而已, 主要重點只有下面這幾個步驟, 改了就好了 🙂

  1. vim class/action/viewarticleaction.class.php
  2. 找第 112 行: 或找 $this->_updateArticleReferrersById($id);
  3. 將這行的 $Id 改成 $Id->getId(), 會變成 $this->_updateArticleReferrersById($id->getId());
  4. 再來存檔即可.

之後再測試看看就都正常囉 🙂

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料