2012-03-15 36 views
3

幾天前,我的自定義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 Errorsmail()在代碼中的某一點後調用(但不包括之後的任何特定的呼叫)沒有任何 PHP代碼被更改?

其他注意事項

  • 沒有超時問題 - 需要不到一秒鐘的加載
  • 沒有內存限制的問題 - 只有用〜崩潰時3MB,但我有一個99MB的限制
+0

這可能會幫助:http://stackoverflow.com/questions/6247132/exec-from-php-is-causing-an-premature末端-的腳本 - 頭 - PHP-CGI-EXE錯誤。你在跑窗戶嗎? – 2012-03-15 18:11:37

+0

@MikeB,nope,頁面加載時間不到一秒:(對不起,應該指定問題!) – 0b10011 2012-03-15 18:13:00

+0

什麼操作系統?任何操作碼緩存? – 2012-03-15 18:15:11

回答

1

轉移到具有類似配置的不同服務器解決了這個問題,所以看起來它實際上是主機服務器的問題(具體原因未知,遺憾的是,它可能仍然是一個謎)。

1

聽起來像sendmail或任何郵件()試圖用來發送郵件可能會死亡。嘗試在命令行中運行腳本並查看您獲得的輸出。

+0

在這種「神祕」的服務拒絕情況下,幾乎總是MTA(郵件傳輸代理)甚至MSA的問題。我會先檢查你的/ var/log/maillog。似乎不是PHP的錯誤。 – sector7 2012-03-17 18:48:54

+0

Tom,「通過SSH [命令行]運行文件有時會返回段錯誤。」在其他所有情況下,它都能正常工作。 @ sector7,遺憾的是,這是共享主機,所以只有一個錯誤日誌可用(由php/apache使用)。有沒有辦法改變記錄錯誤的地方,而不必重建它? – 0b10011 2012-03-19 13:32:45

2

如果存在無法投遞的電子郵件,則會出現此問題 - 如果您將電子郵件發送到與您的網站託管相同的域,則會發生這種情況。 Web服務器可能是「配置錯誤」認爲它是域的郵件服務器 - 這是我的新的虛擬主機的默認設置(w00t或不!)

例如:example.com的網絡主機發送一個郵件歸檔@ example.com,但由於配置錯誤(),Web主機認爲它需要在本地交付。這會失敗,並且Web服務器會報告提及的錯誤500.

此修補程序是將服務器配置爲不作爲該域的郵件服務器。 (我的主機在DNS控制面板中有一個選項:s)。測試發送到非關聯域。

-1

錯誤必須發生,因爲您用來發送郵件的php文件是可寫的組。你應該使用php的權限'644'。

0

此顯式代碼可能是原因,此頁面不能正常工作, 域當前無法處理此請求。 HTTP 500錯誤 可以通過使用先進的PHPMailer類來避免:https://github.com/PHPMailer/PHPMailer

相關問題