2011-06-06 66 views
2

我有一個PHP腳本編寫的調用外部命令使用exec將空間數據庫查詢結果編譯成形狀文件。在有大量記錄(比如15,000)的表中,該命令可能需要7分鐘才能執行。該腳本在不需要太長時間的腳本(可能是< 2分鐘)上工作正常,但在較長的腳本(如7分鐘腳本)上頁面將顯示「500內部服務器錯誤」。在審查Apache服務器日誌時,錯誤狀態爲:「腳本標題的提前結束:php-cgi.exe」。我已經調整了php的最大執行時間,以便有足夠的時間,所以我知道這不是這個。是否有最大的阿帕奇被擊中或其他?執行從PHP導致「腳本標題提前結束:php-cgi.exe」錯誤

回答

1

腳本標題提前結束意味着您的腳本超出了CGI腳本的Web服務器超時。這是一個網絡服務器超時,它與php.ini配置無關。您需要查看CGI處理程序配置以增加CGI腳本運行的時間。

E.g.如果您使用的是mod_fastcgi,您可能需要在Apache配置中指定以下選項:FastCgiServer -idle-timeout 600這會讓您超時10分鐘。默認fastcgi提供30秒。你可以找到一些其他的FastCGI選擇這裏http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

1

顯然,包含在Apache的2.4默認的httpd.conf文件不會自動包含額外的文件的httpd-default.conf下/ conf目錄/額外的(可能是由設計) ,其中包含超時參數。由於超時參數未定義,它將恢復爲默認值30秒,並且腳本超時。

我做了以下解決它:

  • 開業的httpd.conf並添加以下行至底部:

包含的conf /額外/ httpd的默認。 conf

  • 重新啓動的Apache,它的工作。

另一種方法是簡單地以下行(多個)添加到的httpd.conf文件:

超時300
的KeepAlive在
MaxKeepAliveRequests 100
的KeepAliveTimeout 5

希望這可以幫助那裏的人:)