2012-09-23 22 views
-1

我在本地主機上工作。我有PHP 5.4.4。我剛剛在php.net上閱讀,從版本5.4開始,E_STRICT成爲E_ALL的一部分。在PHP 5.4.4中啓用嚴格錯誤報告

所以,我在我的php.ini文件中看到這個。

error_reporting = E_ALL 

所以,我假設它是最嚴格的錯誤報告模式。所以,我故意犯了一個錯誤,看看這是否有效。

我設置$ _SESSION鍵以我的代碼中的數值開頭。沒有錯誤報告。該程序運行不正確。

我還設置:display_errors = On

所以,我認爲任何錯誤應在瀏覽器報告,腳本運行時。但是,沒有任何反應。

其中一位院士,Stackoverflow.com會員,正在檢查我的代碼,發現錯誤,因爲他的瀏覽器報告了錯誤。但是,我的一切都沒有發生。

+0

無論怎樣解決您的問題(您應該首先使用數組作爲值,但這是另一回事),所給出的參數是錯誤的。根據那些錯誤的信息,你正在測試錯誤的東西,然後提出錯誤的問題;)無論你在互聯網上閱讀什麼,都不要相信它。 – hakre

回答

2

您可能已將PHP配置爲不將錯誤輸出到屏幕,而是將它們記錄到日誌文件中。

也就是說,您將display_errors設置爲false,而log_errors設置爲true

這是製作網站的常用配置,不會在屏幕上顯示錯誤(可能會顯示攻擊者的重要信息),而會將其寫入Web服務器日誌。

+0

完成。非常感謝。 –

0

我建議你安裝一個全局錯誤處理程序,並做一些格式那裏,得到一個不錯的結果:

set_error_handler('error_handler'); 

    function error_handler($errno, $errmsg, $filename, $linenum, $vars) 
    {  
    // error was suppressed with the @-operator 
    if (0 === error_reporting()) 
     return false; 

    printf("Unrecoverable error in `%s' line %s: %s\n\n", $filename, $linenum, $errmsg); 

    exit($errno); 
    } 
0

的問題是有點難以跟蹤。如果你想看到帶有顯示錯誤的實際錯誤信息,你必須記住以下幾點:

display_errors directive只有有一些顯示器可以輸出時纔有效。

正常情況下,會話在您的腳本已經完成並且沒有任何關聯輸出時保存在磁盤上。

因此,你不能做如下通知與設置可見:

通知:未知:在線0上線未知跳過數字鍵0 0

在未知是一個標誌,這不是正常的PHP代碼。這正是PHP引擎關閉並保存會話數據的時候。

這樣你就可以從未除非收到此錯誤信息到您的顯示器:

  • 您跟蹤錯誤日誌或使用仍然在停機狀態輸出的CLI環境(STDOUT)
  • 您使用session_write_close()寫的會話,而你的腳本仍然運行:

注意:session_write_close():跳過數字鍵0 in ... on line 12

希望這有助於並充分闡明它。

+0

問題是,只要我開始使用字母開始的會話密鑰,我的問題就解決了。 其次,我想要報告的錯誤也不會以'error_reporting(-1);'顯示。 –

+0

@RohitTripathi:我現在可以完全重現問題並添加了解釋。這應該給你一個解釋。會話密鑰不能只是數字(實際上他們可以,我已經看到,但目前的PHP似乎阻止它),但他們仍然可以以數字開頭的是一些非數字字符。我的錯,我不知道如何重現它。 – hakre