跑 php 頁面讓 httpd 當掉

[華語, cmn-Hant-TW]

這問題卡了一段時間,但是因為也沒太緊急所以就有空的時候才來看一下問題在哪。

總之就是有一台 FreeBSD 11-CURRENT 在某次更新一堆套件之後 laravel 的特定操作就開始會讓 httpd 吃 segmentation fault 了。因為有用到不少套件所以一層一層的追下去發現是 finfo_open() 造成的,會用到這個函式只是要找檔案的 mime-type 而已所以也沒做太奇怪的事情,接著用 laravel 直接跑內建的伺服器模式做一樣的操作,發現也會吃 segmentation fault,那差不多就確定是 php 的問題了,自己寫了一個小程式只呼叫這個函式,用 cli 模式跑一樣炸掉,當下立刻把所有名字含 php55 的套件全部更新,因為 php 跑其他東西都沒當,所以想說應該是某個 php 套件爛掉,因為當掉跟圖形操作有關,一度還以為是 gd 造成的。

結果全部用 ports 重編之後… 照當,那問題就怪了,這時候就把另一台更閒的 FreeBSD 11-CURRENT 更新到最新同時跑 php… 居然沒有當?!對照一下兩邊函式庫安裝的目錄才發現有問題那台的目錄裡面有 pecl 安裝的東西!重新編譯那幾個套件之後,問題就解決了。

所以情況就可能是 php 的更新在某些情況下會讓 pecl 鳥掉,php 內建相關的套件因為版號是跟 php 跑所以 portupgrade/portmaster 時會一起更新,但是 pecl 的套件版號是獨立的所以不知道也得一起更新,然後就炸了。

解決方案的話嘛… 就每次更新完 php 記得把有安裝的 pecl 套件通通更新一次吧

2015-02-03 更新

又遇到了,這次出問題的狀況是 apache 會當,但是 cli 居然沒事,找了一下有看到類似的狀況,解決方法是不要開 dav_svn,把 mod_dav_svn 移掉就能正常運作了,完全不知道這兩者為什麼會有關連

Leave a Reply

Your email address will not be published. Required fields are marked *