PHP 的錯誤機制

Parse errorphp

解析錯誤。問題一般出在你的程序語句上,例如少了一個逗號分號之類的,從而致使解析器放棄執行解析。thinkphp

Fatal error
嚴重錯誤。原於你的程序,例如調用一個沒有定義的函數。函數

Warning
警告。通常出自類型的不匹配,或參數有問題等小問題,解析器仍能夠解析。ui

Notice
提示。給出提示信息,好比你沒有給一個變量賦值,卻要把它打印出來。spa

Strict notice
細微提醒。好比說你的文本格式啦,或是PHP4PHP5之間的差別啦,沒必要管它們get

 

 

咱們通常PHP報錯機制是內部自帶的,可是經過 set_error_handler這個函數,咱們能夠經過本身自定義的函數,來顯示人性化的輸出,防止被黑客攻擊,由於it

自帶的錯誤信息會透露文件哪一行,那一個錯誤io

 

注:The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.function

上面列出的這幾個錯誤類型不能被自定義require

 

  可是有一種方法, register_shutdown_funtiion 這個能夠作到,它的做用是 無論代碼是成功執行完成仍是報錯中斷,都會執行這個方法,報錯時,就會往logs裏面寫入錯誤信息

因此咱們能夠執行它,來輸出本身須要的頁面。 

注:本人目前知道這個函數的用法,是在thinkphp裏面,並且是在使用require_once或者include_once的文件裏面,若是出現代碼錯誤,則不會出現原始的PHP報錯,demo以下

function getE(){
ob_end_clean();
echo 333;
}
register_shutdown_function('getE');
require_once 'index.php';

上面代碼中,index.php裏面有錯誤,可是也不會顯示.

相關文章
相關標籤/搜索