PHP 錯誤 函式
PHP 錯誤簡介
錯誤處理函式用於處理錯誤處理和日誌記錄。
錯誤處理函式允許我們定義自己的錯誤處理規則,並修改錯誤的記錄方式。
日誌函式允許我們將訊息直接傳送到其他機器、電子郵件或系統日誌。
錯誤報告函式允許我們自定義錯誤反饋的級別和型別。
安裝
PHP 錯誤函式是 PHP 核心的一部分。無需安裝即可使用這些函式。
執行時配置
錯誤函式的行為受 php.ini 中設定的影響。
錯誤和日誌記錄配置選項
名稱 | 預設值 | 描述 | 可更改 |
---|---|---|---|
error_reporting | NULL | 設定錯誤報告級別(可以是整數或命名常量) | 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(PHP 4.3 起可用) | PHP_INI_ALL |
ignore_repeated_errors | "0" | 指定是否記錄重複的錯誤訊息。設定為“1”時,它將不會記錄來自同一檔案同一行的重複錯誤(PHP 4.3 起可用) | PHP_INI_ALL |
ignore_repeated_source | "0" | 指定是否記錄重複的錯誤訊息。設定為“1”時,它將不會記錄來自不同檔案或源行的重複錯誤(PHP 4.3 起可用) | PHP_INI_ALL |
report_memleaks | "1" | 如果設定為“1”(預設值),此引數將顯示 Zend 記憶體管理器檢測到的記憶體洩漏報告(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 錯誤訊息(PHP 4.1 起可用) | PHP_INI_SYSTEM |
xmlrpc_error_number | "0" | 用作 XML-RPC faultCode 元素的值(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 | NULL | 指定在錯誤訊息之前輸出的字串 | PHP_INI_ALL |
error_append_string | NULL | 指定在錯誤訊息之後輸出的字串 | PHP_INI_ALL |
error_log | NULL | 指定指令碼錯誤應記錄到的檔名。該檔案應可由 Web 伺服器的使用者寫入。如果使用特殊值 syslog,錯誤將傳送到系統日誌 | PHP_INI_ALL |
PHP 錯誤和日誌記錄函式
函式 | 描述 |
---|---|
debug_backtrace() | 生成回溯資訊 |
debug_print_backtrace() | 列印回溯資訊 |
error_clear_last() | 清除最後發生的錯誤 |
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 預定義的錯誤和日誌記錄常量
值 | 常量 | 描述 |
---|---|---|
1 | E_ERROR | 致命的執行時錯誤。無法恢復的錯誤。指令碼執行停止 |
2 | E_WARNING | 執行時警告(非致命錯誤)。指令碼執行不停止 |
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 起,但直到 PHP 5.4 才包含在 E_ALL 中) |
4096 | E_RECOVERABLE_ERROR | 可捕獲的致命錯誤。表示發生了可能危險的錯誤,但並未使引擎處於不穩定狀態。如果錯誤未被使用者定義的處理程式捕獲,應用程式將像 E_ERROR 一樣中止(自 PHP 5.2 起) |
8192 | E_DEPRECATED | 執行時通知。啟用此項可接收有關未來版本中將無法工作的程式碼的警告(自 PHP 5.3 起) |
16384 | E_USER_DEPRECATED | 使用者生成的警告訊息。這類似於 E_DEPRECATED,但它是在 PHP 程式碼中透過使用 PHP 函式 trigger_error() 生成的(自 PHP 5.3 起) |
32767 | E_ALL | 啟用所有 PHP 錯誤和警告(不包括 5.4 之前的版本中的 E_STRICT) |