2010-03-16 86 views
3

我正在運行PHP和nginx,我使用的是生產版本的php.ini。所以變量display_error被設置爲Off,我有這樣一個很好的理由。但對於某些文件,我需要啓用錯誤報告。我用ini_set打開錯誤報告。但一個簡單的代碼片段,如:PHP根本不會返回錯誤

<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

echo "hi"errorrrrr 
?> 

不會跟蹤錯誤。它只是返回一個HTTP 500內部服務器錯誤消息。我應該怎麼做才能啓用錯誤報告?

+0

重複:http://stackoverflow.com/questions/2421814/php-not-displaying-errors/2421885 – cmptrgeekken 2010-03-16 18:06:24

回答

-1

我一直在尋找的答案就在這個答案的評論:PHP does not return errors at all

它不會在 首位工作的原因是,因爲有您的文件 語法錯誤, PHP確實 根本不解析它。因此,它不會 執行log_errors調用並且具有 依賴於php.ini中的設置。

- cmptrgeekken月16 '10在18:16

1

您應該可以使用log_errors將所有錯誤記錄到文件中。您甚至可以使用error_log將錯誤寫入特定文件,如果這會讓您的生活更輕鬆。

+0

這也不起作用!奇怪。我正在使用:ini_set(「error_log」,「/home/me/log.log」); ini_set(「log_errors」,true); 是的,日誌文件可由Web服務器進程寫入。 – ErJab 2010-03-16 16:16:22

+0

嗯......你有什麼理由不只是直接在php.ini中啓用log_errors?它不會被用戶看到,但會記錄整個站點的任何問題。 – 2010-03-16 16:47:06

+0

哦,是的,我可以做到這一點。謝謝。 – ErJab 2010-03-16 17:18:59

1

當然如果發生語法錯誤,PHP將不會執行這些指令。因爲這個腳本甚至沒有開始執行!因爲它在解析階段失敗了。

你必須使用另一種方法來設置這些指令,雖然它可能會非常棘手。看起來你的PHP運行的是CGI而不是apache模塊,因此,設置ini指令的唯一方法是編輯php.ini本身。

可以肯定的,請運行phpinfo();,看看它說的服務器API。

無論如何,你必須檢查Apache的error_log每次你看到500錯誤,找出發生了什麼。

1

嘗試設置.htaccess文件中的ini設置。

如果您將這些設置置於PHP文件中,而這些文件首先由於語法錯誤而無法編譯,則這些設置不會佔用您的時間。

1

如果你根本無法改變php的配置,你可以做的一個技巧。創建一個包含錯誤文件的新文件。在進行包含之前,請設置所需的配置。

error_reporting(E_ALL); 
ini_set("display_errors", 1); 
include 'some other file with a parse error.php'; 

然後,只需執行包裝腳本來代替。這是有效的,因爲在腳本最終死於解析錯誤之前,將首先評估包含在include之前的語句。