幾天前,我的自定義PHP應用程序中的所有mail()
調用都會導致500 Internal Server Error
,並且唯一記錄的錯誤是Premature end of script headers
。通過SSH運行文件有時返回segfault
。 奇怪的是,在調用mail()
的工作時間和停止工作(在Git中跟蹤更改)之間沒有更改代碼。PHP的mail()函數僅在代碼中的某個點後導致500內部服務器錯誤
儘管沒有對代碼進行任何更改,但我仍然通過了常規檢查(.htaccess,php.ini,自定義錯誤處理程序等),以確保安全。
我試圖通過刪除應用程序中的代碼來診斷問題,直到找出問題爲止。但是,這並沒有將其縮小到特定的代碼段,而是作爲調用時間的代碼量加載到PHP中(但尚未運行)。
在修剪的應用程序中,我能夠獲得一個mail()
調用工作,但第二個失敗。第一個呼叫是緊接在include
呼叫之前(require
具有相同的結果)。第二個是在包含文件的開頭(前面只是開頭的PHP標籤)。
我最初的想法是它是某種內存問題。奇怪的是,導致調用mail()
所需的內存使用情況會根據哪些代碼被保留/從整個應用程序中刪除而引發錯誤更改。在情況下,它仍然可以幫助,對當前代碼集內存使用情況,包括前檔爲:
用法:3113696
最大:3352560
包括文件後的內存使用情況仍是未知數。
我已經和我的主人談過這個問題,他們聲稱沒有任何改變會導致這個問題。
我一直無法在其他應用程序中重現此問題。
技術用於
- PHP 5.3.10(5.2.17也影響)
- 的MySQLi(特別是定製類擴展庫MySQLi)
- 了Suhosin補丁0.9.10
錯誤信息已記錄
- sc的提前結束RIPT標題:XXX,引用者:XXX
TL; DR
什麼會導致我的PHP應用程序,開始引起500 Internal Server Errors
當mail()
在代碼中的某一點後調用(但不包括之後的任何特定的呼叫)沒有任何 PHP代碼被更改?
其他注意事項
- 沒有超時問題 - 需要不到一秒鐘的加載
- 沒有內存限制的問題 - 只有用〜崩潰時3MB,但我有一個99MB的限制
這可能會幫助:http://stackoverflow.com/questions/6247132/exec-from-php-is-causing-an-premature末端-的腳本 - 頭 - PHP-CGI-EXE錯誤。你在跑窗戶嗎? – 2012-03-15 18:11:37
@MikeB,nope,頁面加載時間不到一秒:(對不起,應該指定問題!) – 0b10011 2012-03-15 18:13:00
什麼操作系統?任何操作碼緩存? – 2012-03-15 18:15:11