The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

將 PHP4 升級時遇到 PHP Catchable fatal error 的問題

由於最近在協助客戶將所有 PHP4 的網站全部升級至 PHP5,轉移的過程中遇到了一個 PHP Catchable fatal error 的錯誤訊息,訊息如下:

PHP Catchable fatal error: Object of class Cart could not be converted to string in C:\Inetpub\wwwroot\libs\functions.inc.php on line 118

我先開啟該檔案的 118 行查看出了什麼問題,但查不出任何異狀,只好開始往回 Stack Trace,查到了錯誤發生的地方:

<?php echo $val; ?>

而至於 $val 是我從資料庫的資料取出之後,透過 unserialize 過的物件,由於我有些欄位的值是儲存成物件序列化(Serialize)的結果 ( e.g. 購物車資訊 ),等要用時再直接反序列化來用。

由於之前的程式沒寫好,遇到這類程式也是直接輸出物件,但當時 PHP4 又沒有實做 __toString() 方法,所以導致當要將 object 轉換成 string 時才會發生這個嚴重錯誤(fatal error)。這個不相容的問題是發生在 PHP 5.2 之後的版本,詳細的資訊可參考 Backward Incompatible Changes 說明。

若要解決這個問題也很簡單,由於序列化(Serialize)所儲存的是「當時物件的資訊」,並不包含「類別」的定義,所以原本在資料庫中的資料並沒有異動的需要,只要你將原本物件定義的地方加上 __toString() 方法即可。例如:

function __toString()
{
    return "";
}

好康報報

最近有個好康的消息要報給大家知道,微軟在這不景氣的時刻,竟然還推出一個 PHP 架站賺好康,千元購物金任你拿 活動,如果你的 PHP 網站目前是架設在 Linux 平台,只要成功轉移至 Windows 平台就可以獲得 NT$ 1,000.- 元的 Yahoo 購物金喔,如果本來要就要轉移網站的可以立即前往報名,只有 100 位名額喔。

至於轉移的參考依據都是以 NETCRAFTThe Netcraft Web Server Query Form 作為參考依據,各位可以到這裡查看看你網站在上面登記的是什麼 OS 與 Web Server,如下圖示,我前幾天才剛把我們公司的官網從 Linux 移至 Windows 平台,已經現賺 NT$ 1,000 了。 ^_^

 The Netcraft Web Server Query Form

The Netcraft Web Server Query Form : OS, Web Server and Hosting History for www.miniasp.com

相關連結

留言評論