PHP錯誤簡介
誤差函數用於處理錯誤處理和日誌記錄。
錯誤功能允許我們定義自己的錯誤處理規則,以及修改錯誤可以被記錄的方式。
日誌記錄功能,使我們能夠直接發送消息給其他機器,電子郵件或系統日誌。
錯誤報告功能使我們能夠定制給出什麼樣的水平和類型的錯誤反饋。
安裝
PHP的錯誤函數是PHP核心的一部分。 沒有安裝是需要使用這些功能。
運行時配置
誤差函數的行為受php.ini的影響。
錯誤和日誌記錄配置選項:
名稱 | 默認 | 描述 | 多變 |
---|---|---|---|
使用error_reporting | 空值 | 設置錯誤報告級別(整數或命名常量) | PHP_INI_ALL |
的display_errors | “1” | 指定錯誤是否應該打印在屏幕上,還是需要從用戶隱藏。 注:此功能不應該在生產系統中使用(只支持你的發展) | PHP_INI_ALL |
display_startup_errors | “0” | 即使display_errors設置為上,不顯示PHP的啟動順序期間發生的錯誤 注:強烈建議保持display_startup_errors關閉,除了調試 | PHP_INI_ALL |
log_errors | “0” | 定義腳本錯誤消息是否應該被記錄到服務器錯誤日誌或者error_log中。 注:強烈建議使用錯誤日誌,而不是錯誤的顯示生產網站 | PHP_INI_ALL |
log_errors_max_len | “1024” | 以字節為單位的log_errors的最大長度。 值"0"可以用於不應用任何最大長度在所有。 該長度被施加到記錄錯誤,錯誤顯示,並且還$ php_errormsg中(available since PHP 4.3) | PHP_INI_ALL |
ignore_repeated_errors | “0” | 指定是否記錄重複的錯誤消息。 當設置為"1"將無法登錄與在同一行的同一文件的重複錯誤錯誤(available since PHP 4.3) | PHP_INI_ALL |
ignore_repeated_source | “0” | 指定是否記錄重複的錯誤消息。 當設置為"1"它將不記錄與來自不同的文件或源極線的重複錯誤的錯誤(available since PHP 4.3) | PHP_INI_ALL |
report_memleaks | “1” | 如果設置為"1" (the default) ,該參數將顯示由Zend的內存管理器檢測內存洩漏的報告(available since PHP 4.3) | PHP_INI_ALL |
的track_errors | “0” | 如果設置為"1"最後的錯誤消息將永遠存在於變量$ php_errormsg中 | PHP_INI_ALL |
html_errors | “1” | 關閉HTML標籤錯誤信息 | PHP_INI_ALL PHP_INI_SYSTEM在PHP <= 4.2.3。 |
xmlrpc_errors | “0” | 關閉正常的錯誤報告和格式錯誤的XML-RPC錯誤信息(available since PHP 4.1) | PHP_INI_SYSTEM |
xmlrpc_error_number | “0” | 作為XML-RPC的faultcode元素的值(available since PHP 4.1) | PHP_INI_ALL |
docref_root | “” | (可用自PHP 4.3) | PHP_INI_ALL |
docref_ext | “” | (可用自PHP 4.3.2) | PHP_INI_ALL |
error_prepend_string | 空值 | 指定了一個錯誤消息之前的字符串,以輸出 | PHP_INI_ALL |
error_append_string | 空值 | 的錯誤消息後指定一個字符串,以輸出 | PHP_INI_ALL |
error_log中 | 空值 | 指定在腳本錯誤應該被記錄的文件的名稱。 該文件應該是Web服務器的用戶可寫的。 如果使用了特殊值系統日誌,錯誤會發送到系統日誌,而不是 | PHP_INI_ALL |
PHP錯誤和記錄功能
功能 | 描述 |
---|---|
debug_backtrace() | 生成一個回溯 |
debug_print_backtrace() | 打印回溯 |
error_get_last() | 返回上次發生錯誤 |
error_log() | 發送錯誤信息到日誌,以一個文件或郵件帳戶 |
error_reporting() | 報告哪些錯誤指定 |
restore_error_handler() | 恢復以前的錯誤處理程序 |
restore_exception_handler() | 恢復以前的異常處理程序 |
set_error_handler() | 設置一個用戶定義的錯誤處理函數 |
set_exception_handler() | 設置一個用戶定義的異常處理函數 |
trigger_error() | 創建用戶級別的錯誤消息 |
user_error() | 的別名trigger_error() |
PHP 5預定義的錯誤和日誌常量
值 | 不變 | 描述 |
---|---|---|
1 | E_ERROR | 致命的運行時錯誤。 無法從恢復的錯誤。 腳本執行停止 |
2 | E_WARNING | 運行時警告(non-fatal errors) 。 腳本執行不被中斷。 |
4 | E_PARSE | 編譯時解析錯誤。 分析應該只由分析器生成的錯誤 |
8 | E_NOTICE | 運行時通知。 腳本發現這可能是一個錯誤,但通常運行一個腳本時,也可能發生 |
16 | E_CORE_ERROR | 在PHP啟動致命錯誤。 這就好比E_ERROR,除了它是由PHP的核心生成 |
32 | E_CORE_WARNING | 在PHP啟動非致命錯誤。 這就好比E_WARNING,除了它是由PHP的核心生成 |
64 | E_COMPILE_ERROR | 致命編譯時錯誤。 這就好比E_ERROR,除了它是生成通過了Zend腳本引擎 |
128 | E_COMPILE_WARNING | 非致命編譯時錯誤。 這就好比E_WARNING,除了它是通過產生由在Zend腳本引擎 |
256 | E_USER_ERROR | 致命的用戶生成錯誤。 這就好比E_ERROR,除了它是在PHP代碼通過使用PHP函數生成trigger_error() |
512 | E_USER_WARNING | 非致命的用戶生成的警告。 這就好比E_WARNING,除了它是在PHP代碼通過使用PHP函數生成trigger_error() |
1024 | E_USER_NOTICE | 用戶生成通知。 這就好比E_NOTICE,除了它是在PHP代碼通過使用PHP函數生成trigger_error() |
2048 | E_STRICT | 啟用有PHP建議改變你的代碼,這將確保你的代碼的最佳的互操作性和向前兼容性(自PHP 5起,但不包括在E_ALL直到PHP 5.4) |
4096 | E_RECOVERABLE_ERROR | 捕獲的致命錯誤。 指示發生了可能危險的錯誤,但並沒有離開引擎處於不穩定的狀態。 如果錯誤不是由用戶定義的手柄抓,應用程序終止,因為它是一個E_ERROR (Since PHP 5.2) |
8192 | E_DEPRECATED | 運行時通知。 啟用該接收有關的代碼,將不會在以後的版本警告(Since PHP 5.3) |
16384 | E_USER_DEPRECATED | 用戶生成警告信息。 這就好比E_DEPRECATED,除了它是在PHP代碼通過使用PHP函數生成trigger_error()自PHP 5.3) |
32767 | E_ALL | 啟用所有PHP錯誤和警告(except E_STRICT in versions < 5.4) |