PHP錯誤及處理

2021-08-21 18:59:00 字數 3774 閱讀 3805

php生成的每個錯誤都包含乙個型別。這些錯誤的型別列表如下,表中有關於它們行為的簡短描述以及產生的原因。

常量

說明

備註

e_error(integer)

致命的執行時錯誤。這類錯誤一般是不可恢復的情況,例如記憶體分配導致的問題。後果是導致指令碼終止不再繼續執行。

e_warning(integer)

執行時警告 (非致命錯誤)。僅給出提示資訊,但是指令碼不會終止執行。

e_parse(integer)

編譯時語法解析錯誤。解析錯誤僅僅由分析器產生。

e_notice(integer)

執行時通知。表示指令碼遇到可能會表現為錯誤的情況,但是在可以正常執行的指令碼裡面也可能會有類似的通知。

e_core_error(integer)

在php初始化啟動過程中發生的致命錯誤。該錯誤類似e_error,但是是由php引擎核心產生的。

since php 4

e_core_warning(integer)

php初始化啟動過程中發生的警告 (非致命錯誤) 。類似e_warning,但是是由php引擎核心產生的。

since php 4

e_compile_error(integer)

致命編譯時錯誤。類似e_error,但是是由zend指令碼引擎產生的。

since php 4

e_compile_warning(integer)

編譯時警告 (非致命錯誤)。類似e_warning,但是是由zend指令碼引擎產生的。

since php 4

e_user_error(integer)

使用者產生的錯誤資訊。類似e_error, 但是是由使用者自己在**中使用php函式 trigger_error()來產生的。

since php 4

e_user_warning(integer)

使用者產生的警告資訊。類似e_warning, 但是是由使用者自己在**中使用php函式 trigger_error()來產生的。

since php 4

e_user_notice(integer)

使用者產生的通知資訊。類似e_notice, 但是是由使用者自己在**中使用php函式 trigger_error()來產生的。

since php 4

e_strict(integer)

啟用 php 對**的修改建議,以確保**具有最佳的互操作性和向前相容性。

since php 5

e_recoverable_error(integer)

可**捉的致命錯誤。 它表示發生了乙個可能非常危險的錯誤,但是還沒有導致php引擎處於不穩定的狀態。 如果該錯誤沒有被使用者自定義控制代碼捕獲 (參見set_error_handler()),將成為乙個e_error從而指令碼會終止執行。

since php 5.2.0

e_deprecated(integer)

執行時通知。啟用後將會對在未來版本中可能無法正常工作的**給出警告。

since php 5.3.0

e_user_deprecated(integer)

使用者產少的警告資訊。 類似e_deprecated, 但是是由使用者自己在**中使用php函式 trigger_error()來產生的。

since php 5.3.0

e_all(integer)

e_strict除外的所有錯誤和警告資訊。

30719 in php 5.3.x,6143 in php 5.2.x,2047 previously 

如果在**中沒有對錯誤進行處理的時候,php將會根據錯誤的型別進行處理. 通過php.ini的error_reporting或者error_reporting()可以用來隱藏或控制錯誤資訊. 但是,強烈建議設定配置指令,因為在指令碼開始執行之前可能會發生一些錯誤,這樣便於定位錯誤位置。

在開發環境中,您應該始終將error_reporting設定為e_all,因為您需要了解並修復php提出的問題。在生產中,您可能希望將其設定為更詳細的級別,比如e_all & ~e_notice & ~e_strict & ~e_deprecated,但是在許多情況下,e_all也是可以的,因為它可能提供及早的幫你暴露問題。

php如何處理錯誤取決於另外兩個php.ini引數。

display_errors控制是否將錯誤顯示為指令碼輸出的一部分。在生產環境中,應該始終禁用這一功能,因為它可以包含諸如資料庫密碼之類的機密資訊,但在開發過程中常常是有用的,因為它可以確保立即報告問題。

除了display_errors之外, 在配置檔案中log_errors指令開啟時候記錄錯誤。這會將任何錯誤記錄到error_log定義的檔案或syslog中。這在生產環境中非常有用,因為您可以記錄發生的錯誤,然後基於這些錯誤生成報告。

如果php的預設錯誤處理不能滿足要求,您也可以通過使用set_error_handler()來處理多種型別的錯誤。當有些錯誤型別不能使用這種方式處理時候,你也可以在指令碼中使用其他合適的方式處理:例如,向使用者展示乙個自定義的錯誤頁面,然後通過比日誌更直接方式,比如通過傳送乙個包含錯誤資訊的電子郵件到指定郵箱。

php 7 改變了大多數錯誤的報告方式。不同於傳統(php 5)的錯誤報告機制,現在大多數錯誤被作為error異常丟擲。

這種error異常可以像 exception異常一樣被第乙個匹配的 try/ catch塊所捕獲。如果沒有匹配的catch

塊,則呼叫異常處理函式(事先通過 set_exception_handler()註冊)進行處理。如果尚未註冊異常處理函式,則按照傳統方式處理:被報告為乙個致命錯誤(fatal error)。

error類並非繼承自 exception類,所以不能用 catch (exception $e) 來捕獲error。你可以用catch (error $e) ,或者通過註冊異常處理函式(set_exception_handler())來捕獲error

<?php

try catch (error $e)

error 層次結構:

- throwable

- error

- arithmeticerror(算術錯誤)

- divisionbyzeroerror(除0錯誤)

- assertionerror(宣告錯誤)

- parseerror(解析錯誤)

- typeerror(型別錯誤)

- exception

- ...

PHP 錯誤處理及異常處理

1.設定自己的錯誤處理函式 trigger error 捕捉使用者級別的錯誤。set error handler 使用者自定義錯誤處理函式。2.捕獲異常 捕獲異常當然用trycatch 當然 中使用的異常處理類是thinkphp中,throw exception 為thinkphp的丟擲異常函式 另...

php 錯誤處理及實現

1.php的錯誤,警告,異常處理如何實現,那些函式用於處理對應的錯誤 php 異常提示分為三類 error warning notice 錯誤補充 fatal error 致命錯誤 指令碼終止執行 e error 致命的執行錯誤,錯誤無法恢復,暫停執行指令碼 e core error php啟動時初...

php錯誤顯示及報告處理 (2)

承上 php還允許您通過 set error handler 函式指定您自已的出錯處理函式。如 set error handler my error handler 錯誤處理函式 function my error handler number,string,file,line,context er...