2011-07-12 22 views
2

所以我設置display_errors爲「開」 和error_reporting到E_ALL | E_STRICT 甚至display_startup_errors應爲「開」。如何讓Apache輸出真的出現所有錯誤?

但是,如果我忘記$或a),Apache會給我一個空白頁面。

在CLI上,雖然我收到一條消息。

如何顯示該信息?

回答

6

正如您的評論討論提示,問題在於您試圖在腳本中設置它。

爲了運行腳本,PHP解釋器必須首先解析該腳本。如果解析失敗(即:存在語法錯誤),該腳本無效,並且解釋器根本不運行它 - 它會發出致命錯誤。

所以,語法錯誤是編譯時錯誤,而不是一個運行時錯誤。因此,如果您忘記$,)或;,例如,您的腳本語法無效。因此腳本不運行。因此你的ini_set()和類似的語句永遠不會運行。

解釋者根本沒有那麼遠。

讓那些錯誤輸出的唯一方法是設置這些解釋試圖之前變量解析你破碎的腳本,即:在php.ini(或者在.htaccess如果你在運行mod_php,並且) 。這樣,錯誤報告配置會在解釋器試圖解析您的腳本之前設置。


當PHP運行腳本,它通過三個基本步驟(這是簡化的):

1)解析腳本 - 它會掃描整個腳本從上到下,並創建一個表示的。如果發生語法錯誤,則無法解析併發出致命錯誤,並停止。

2)編譯腳本 - 它取得第一步的輸出,並將其轉換爲機器碼。

3)運行腳本 - 它運行的機器代碼,這是你的腳本,在本質上線開始1

您遇到的問題是,第1步(解析)時,PHP有沒有然後運行任何你的代碼(它不會,直到第3步)。因此,它所運行的設置是PHP ini的默認設置 - 如果您只編寫一個只包含一個phpinfo()調用的單行腳本,您會看到什麼。

1
  1. 這屬於serverFault
  2. 你確定你重新啓動Apache的?
  3. 你確定你編輯了正確的php.ini文件嗎?
  4. 嘗試使用error_reporting設爲E_ALL

這些建議/點應,如果你正在編輯服務器配置來完成的,因爲你不能處理PHP腳本解析錯誤!

+0

1.對不起,我以爲你在php.ini中設置它2.看第一個點3.看第一個點4.你告訴它是E_ALL | E_STRICT - 你確定你的提供者允許ini_set(); ? – genesis

+0

我是我自己的提供者,可以這麼說。 ini_set和設置alls顯示效果,但不是我想要的 - 這是我的問題瞄準。管道|表示一個按位或,並使PHP報告E_ALL和E_STRICT(這不包括E_ALL,驚喜,驚喜) – Raffael

+1

和爲什麼不嘗試在php.ini而不是在PHP腳本中設置它? – genesis