Pointless 所遭遇到的 Segmentation Faults
怪事
在開發Pointless
到現在的兩年期間內,初期其實都還算順利,直到最近幾個月遇到了兩次Segmentation Fault
,終於我遇的不是PHP
的Syntax Error
,而是PHP
的Bugs
或是其中函式庫的問題。
寫直譯式語言可以遇到語言的錯誤還滿猛的,一次是在OS X
上用PHPBrew
編出的PHP
,另一次就是最近在Ubuntu 13.10
及Ubuntu 12.04 LTS
上還是用PHPBrew
所編出的PHP
。
題外話,話說PHPBrew
超好用的,可以在不同版本的下作切換,對於開發來說實在是很棒。
在OS X的那次
我先後在不同的兩台Mac Air
測試過都會發生錯誤,在文章數量小的情況下不會有問題,但是文章只要一多就會發生錯誤。
而出錯的地方就是用來將資料及樣板結合的bindData()
其中只有include
以及Output Buffer
等函式,但我檢查不出是PHP VM
編譯時的哪支有問題所以作罷。
還因為這樣,當時還有人評論說這個部落格只要文章超過140字元就會爆炸。但這不是我的錯,這一定有誤會。
在Ubuntu的這次
最近,其實就是上禮拜,我再忙著把Pointless
升級成支援PHP 5.4
所以將系統中PHP 5.4.12
升級到PHP 5.4.25
以及PHP 5.5.5
升級到PHP 5.5.9
。
但是PHP
在./configure
的時候會出現configure: error: Could not find libpcre.(a|so) in /usr
而失敗,把出現問題的檔案補上後,可以正常編譯了。
當我正開心要作測試的時候,他就爆了。這次的問題出現在剛剛的PCRE Library
上,只要我在程式中使用preg_match()
然後所輸入的字串太長就會爆炸。
所以我就重新編譯了新的PCRE Library
,想當然爾./configure
還是找不到檔案,手動補上檔案後在同樣的地方還是爆了...。最後我在另外一台機器上編譯同樣的檔案,使用同樣的./configure
設定結果還是一樣。
結論
Mac OS X
系統預設的函式庫跟我正常使用的Ubuntu
一定有哪邊不一樣。
Ubuntu
幾個月前的所使用的函式庫跟現在跟更新後的Ubuntu
的函式庫一定有哪邊不一樣。
到底哪裡不一樣?我還要再查查。