最近開發PHP寫了一隻要解壓縮zip檔並且讀取裡頭Excel以及txt的文字檔,所以執行時間有時後會很久,按個送出,就得等個5~4x秒左右,可是每次執行到某份檔案需要處理很久的時候,網頁就回傳一串錯誤訊息,記得裡頭的Key Word有"Premature end of script headers"這個字眼,雖然去google了一陣子還是沒找到正解。

  後來看到錯誤頁面說明寫著,想看更詳細的錯誤訊息,請查詢server error_log,臥曹!先別提前面要我去聯絡系統管理者,又不是windows的錯誤訊息,是要聯絡誰..XD,之後到server上找了error_log來看,發現了另外一行Key Word:"mod_fcgid: read data timeout in 31 seconds",接著再去詢問Google大神,這次越來越接近問題核心了。

  後來找到了下面幾篇:
1. php执行时间错误IPCCommTimeout(mod_fcgid: read data timeout in 31 seconds) - Virtualmin使用教程 - 国外/美国服务器租用
2. Thread: php - mod_fcgid: read data timeout in 31 seconds,

  認真的看了一下後,總算找出原來是Apache的Module mod_fcgid的裡面某個參數(原本叫IPCCommTimeout,新版Apache改成FcgidIOTimeout)設定的問題,而至於這個設定在哪,就自己到server上去找找fcgid這個key word了,畢竟每個人Apache的設定都不太一樣,但是找到這參數設定"FcgidIOTimeout 31",自己把時間延長就可以了。

我的情況是在/etc/apache2/sites-available/下的某某conf裡面有此設定

  雖然解決了眼前的問題,但仍然覺得當初設定31秒也是有道理的,所以當處理時間需要延長的時候,可能要考慮是否是程式架構問題,能不能再改寫成執行更有效率的方式。而我的情況是因為使用了第三方套件來讀取Excel,而再讀取的過程中耗費太長的時間,所以不得已只好延長處理時間,比起花時間再去研究修改套件來的方便簡單多了。
創作者介紹

每天都有新鮮事

soarlin 發表在 痞客邦 PIXNET 留言(0) 人氣()