萬分感謝 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 行).
以上講一堆東西, 看不懂就別看了, 純粹記錄一下自己是怎麼修的而已, 主要重點只有下面這幾個步驟, 改了就好了 🙂
- vim class/action/viewarticleaction.class.php
- 找第 112 行: 或找 $this->_updateArticleReferrersById($id);
- 將這行的 $Id 改成 $Id->getId(), 會變成 $this->_updateArticleReferrersById($id->getId());
- 再來存檔即可.
之後再測試看看就都正常囉 🙂