2010-04-22 64 views
101

這從來沒有發生過。通常它顯示錯誤,但現在它只是給我一個500內部服務器錯誤。當然,之前,當它顯示錯誤時,它是不同的服務器。現在我在一個新的服務器上(我有完整的根,所以如果我需要在php.ini中的某個地方配置它),或者也許它與Apache有關?如何讓PHP顯示錯誤而不是給我500內部服務器錯誤

我一直在忍受它只是將文件傳輸到我的另一臺服務器,並在那裏運行找到錯誤,但這太枯燥了。有沒有辦法來解決這個問題?

+3

這聽起來像一個Apache的問題,而不是一個PHP問題。任何時候Apache都會有配置問題(如.htaccess中的錯誤語法)。檢查你的Apache錯誤日誌中是否有錯誤信息。 – 2010-04-22 01:48:50

回答

155

檢查php.ini文件中的error_reportingdisplay_errorsdisplay_startup_errors設置。它們應分別設置爲E_ALL"On"(儘管您不應在生產服務器上使用display_errors,因此請禁用此操作,並在部署時使用log_errors)。你也可以在你的腳本設置它們在運行時的一開始就更改這些設置(除display_startup_errors)(雖然你可能無法捕獲所有的錯誤這樣):

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

之後,重新啓動服務器。

+1

我們如何關閉display_errors,但PHP顯示200或404而不是500? – Pacerier 2013-07-22 16:11:41

+0

不知道它是否是在2010年,但是,在2014年,您不需要重新啓動服務器(除非使用像APC這樣的操作碼緩存)。 – 2014-08-16 11:20:00

+0

即使做了所有這些,我仍然得到500錯誤......也許它會到來從IIS? – 2017-10-12 22:52:28

12

值得注意的是,如果你的錯誤是由於.htaccess引起的,例如缺少rewrite_module,你仍然會看到500內部服務器錯誤。

+3

我實際上在apache上缺少一個模塊。我通過查看錯誤日誌(默認爲ubuntu是/var/log/apache2/error.log) – 2015-03-04 13:07:53

2

從PHP代碼顯示啓用錯誤不適合我。就我而言,使用NGINX和PHP-FMP,我使用grep來跟蹤日誌文件。例如,我知道文件名mycode.php導致錯誤500,但不知道哪一行。從控制檯,我用這個:

/var/log/php-fpm# cat www-error.log | grep mycode.php 

和我有輸出:

[04-Apr-2016 06:58:27] PHP Parse error: syntax error, unexpected ';' in /var/www/html/system/mycode.php on line 1458 

這可以幫助我找到在那裏我有錯字行。

7

使用「php -l <」文件名稱>「(即'L')從命令行輸出可能導致PHP拋出狀態500錯誤的語法錯誤。它會輸出類似:

PHP解析錯誤:語法錯誤,意想不到的 '}' <名>上線18

+1

這真的幫助我了!尾巴我的錯誤日誌沒有產生任何東西,但這個寶石完美工作,並顯示我的語法錯誤和行號。正在調試一個Class文件。謝謝! – 2017-03-19 03:50:58

0

注意檢查是否

display_errors 

error_reporting 

在ini文件的其他地方處於活動狀態(不是註釋)。

我的開發服務器在升級到 後拒絕顯示錯誤Kubuntu 16.04 - 我檢查過php.ini多次......原來有diplay_errors = off;大約100行以下我的

display_errors = on; 

所以請記住最後一個數字!

0

如果一切都失敗嘗試移動(即,在bash中)將所有文件和目錄「移開」並逐一添加回去。

我剛剛發現,我的.htaccess文件引用了一個不存在的.htpasswd文件。 (#silly)

2

儘量不要去

MAMP > conf > [your PHP version] > php.ini 

MAMP > bin > php > [your PHP version] > conf > php.ini 

,並改變它在那裏,它的工作對我來說...