2011-01-19 71 views
77

當我嘗試將HTTP POST發送到我應用程序中的特定地址時,出現500內部服務器錯誤。我已經查看了虛擬主機文件中指定的自定義日誌目錄中的服務器日誌,但是該錯誤沒有顯示出來,所以調試這一直是一個痛苦的屁股。內部錯誤500 Apache,但在日誌中沒有?

如何導致Apache將內部500錯誤記錄到錯誤日誌中?

+0

我有同樣的問題使用PHP與虛擬主機....沒有錯誤(Apache2,Ubuntu)。最終失去了PHP模塊(mysql,json等) – 2011-08-07 19:57:51

+0

在我們的系統上,它將它們發送到訪問日誌(可能是因爲從Apache的角度來看,它是正常工作的,只是從更深的層面傳遞它們 - - 在我們的例子中,Passenger/Rails)。只是把這張筆記放在這裏,以防有人在撓頭。 – 2016-07-08 18:29:55

回答

6

錯誤日誌通常具有(更多)特定錯誤。通常會被拒絕權限,甚至無法找到解釋器。

這意味着故障幾乎總是存在於您的腳本中。例如你上傳了一個Perl腳本,但沒有給它執行權限?或者如果您在Windows環境中編寫腳本,然後將其上傳到服務器而不是轉換行結束符,它可能會在Linux環境中損壞,您將得到此錯誤。

在Perl

,如果你忘記

print "content-type: text/html\r\n\r\n"; 

你會得到這個錯誤

有很多原因吧。所以請先檢查您的錯誤日誌,然後提供更多信息。

默認的錯誤日誌通常在/var/log/httpd/error_log/var/log/apache2/error.log

您查看默認錯誤日誌(如上所述)的原因是因爲錯誤並不總是按虛擬主機中定義的方式發佈到自定義錯誤日誌中。

假設Linux和不一定perl的

+5

我檢查了服務器ErrorLog,並且沒有什麼可以在那裏找到。 – wcolbert 2011-01-19 06:14:25

+1

你是對的,它證明是PHP腳本的問題。 PEAR庫沒有安裝。我將它安裝在我的VPS上,一切正常。謝謝大家! – wcolbert 2011-01-19 08:02:51

+163

如何「請檢查日誌」是「爲什麼我的日誌爲空」的答案? – 2015-08-22 19:20:12

6

檢查,這可能是從Apache的錯誤日誌的單獨文件的PHP錯誤日誌。

通過去phpinfo()找到它並檢查error_log屬性。 如果沒有設置。將其設置爲:https://stackoverflow.com/a/12835262/445131

也許您的post_max_size對於您要發佈的內容太小,或者其他最大內存設置中的一個太低。

+0

問題是,*「我如何導致Apache將內部500錯誤記錄到錯誤日誌中?」*這可能是一條評論。 – jww 2017-12-22 00:10:17

0

檢查您運行的php版本是否與您的代碼庫匹配。例如,您的本地環境可能正在運行php 5.4(並且運行正常),也許您正在安裝了php 5.3的新計算機上測試您的代碼。如果你使用5.4的語法,例如array [),那麼你會得到上面描述的情況。

6

我剛剛遇到了這個,這是由於我的.htaccess文件中的mod_authnz_ldap配置錯誤。絕對沒有記錄,但我一直得到500錯誤。

93

爲什麼500內部服務器錯誤未被記錄到您的apache錯誤日誌中?

導致500內部服務器錯誤的錯誤來自PHP模塊。默認情況下,PHP不會記錄這些錯誤。原因是您希望網絡請求的速度儘可能快。

這些用於啓用內部服務器錯誤記錄的指令是Ubuntu 12.10PHP 5.3.10Apache/2.2.22

確保PHP打開記錄:

  1. 找到你的php.ini文件:

    [email protected]:~$ locate php.ini 
    /etc/php5/apache2/php.ini 
    
  2. 編輯該文件作爲根:

    sudo vi /etc/php5/apache2/php.ini 
    
  3. 在php.ini中找到這一行:

    display_errors = Off 
    
  4. 更改上面的行這樣的:

    display_errors = On 
    
  5. 文件中的低了下去,你會看到:

    ;display_startup_errors 
    ; Default Value: Off 
    ; Development Value: On 
    ; Production Value: Off 
    
    ;error_reporting 
    ; Default Value: E_ALL & ~E_NOTICE 
    ; Development Value: E_ALL | E_STRICT 
    ; Production Value: E_ALL & ~E_DEPRECATED 
    
  6. 分號是註釋,這意味着線不生效。更改這些行,使它們看起來像這樣:

    display_startup_errors = On 
    ; Default Value: Off 
    ; Development Value: On 
    ; Production Value: Off 
    
    error_reporting = E_ALL 
    ; Default Value: E_ALL & ~E_NOTICE 
    ; Development Value: E_ALL | E_STRICT 
    ; Production Value: E_ALL & ~E_DEPRECATED 
    

    這與PHP通信的是我們要記錄所有這些錯誤。警告,會有很大的性能下降,所以您不希望在生產環境中啓用此功能,因爲日誌記錄需要工作,而且工作需要時間,而且花費時間。

  7. 重新啓動PHP和Apache應該應用更改。

  8. 你做了什麼,又導致500內部服務器錯誤,並檢查日誌:

    vi /var/log/apache2/error.log 
    
  9. 您應該看到500錯誤在最後,是這樣的:

    [Wed Dec 11 01:00:40 2013] [error] [client 192.168.11.11] PHP Fatal error: 
    Call to undefined function Foobar\\byob\\penguin\\alert() in /yourproject/ 
    your_src/symfony/Controller/FuckedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup 
    
6

如果您的內部服務器錯誤信息未顯示在日誌文件中,您可能需要resta rt Apache服務

我發現Apache 2.4(至少在Windows平臺上)傾向於頑固地拒絕刷新日誌文件 - 相反,記錄的數據在內存中保留了很長一段時間。從性能的角度來看,這是一個好主意,但在開發時可能會造成混淆。

0

嘗試訪問一個靜態文件。如果這不起作用,則 轉到根目錄「/」或「c:\」到您文件目錄的所有目錄,並檢查它們是否包含「.htaccess」文件。

我曾經在「c:\」中留下了一個文件,它有最奇怪的結果。

0

在我的情況下,它是httpd.conf中的ErrorLog指令。只是在我放棄之後意外注意到它。決定分享發現) 現在我知道在哪裏可以找到500錯誤。

相關問題