set_error_handler函數爲用戶自定義錯誤處理函數,執行與程序執行期間。
set_error_handler(錯誤處理函數名,錯誤類型)參數還可以是一個數組,數組的第一個數據是類名第二個是類中的方法。
如果使用了該函數,會完全繞過標準的 PHP 錯誤處理函數,如果必要,用戶定義的錯誤處理程序必須終止 (die() ) 腳本。
注意:如果在腳本執行前發生錯誤,由於在那時自定義程序還沒有註冊,因此就不會用到這個自定義錯誤處理程序。
細節問題:::
php默認的錯誤處理程序會打印出詳細的錯誤數據,所以有時會暴露一些不想讓別人知道的信息如:Notice: Use of undefined constant test - assumed ''test'' in D:interpubbigflytest.php on line 3。有些網管幹脆把PHP配置文件中的
display_errors 設置爲 Off 來解決,但實際可以使用set_error_handler()自定義錯誤處理程序,對重要信息進行過濾。使用set_error_handler()後,error_reporting ()將會失效。也就是所有的錯誤(除上述的錯誤)都會交給自定義的函數處理。
trigger_error() 函數創建用戶定義的錯誤消息。trigger_error() 用於在用戶指定的條件下觸發一個錯誤消息。它與內建的錯誤處理器一同使用,也可以與由 set_error_handler() 函數創建的用戶自定義函數使用。如果指定了一個不合法的錯誤類型,該函數返回 false,否則返回 true。規定錯誤消息的錯誤類型。可能的值:
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
1:function test($errno, $errstr, $errfile, $errline){
echo "有錯誤[$errno]:$errstr";
echo "<br>在文件 $errfile 的";
echo "<br>第 $errline 行";
die();
}
set_error_handler("test");
$a=1;
if($a>0){
trigger_error("fff");
}
2:class test{
public static function testError($errno, $errstr, $errfile, $errline){//編譯器提示要用靜態方法。??????
echo "有錯誤[$errno]:$errstr";
echo "<br>在文件 $errfile 的";
echo "<br>第 $errline 行";
die();
}
}
set_error_handler(array("test","testError"));
$a=1;
if($a>0){
trigger_error("觸發錯誤");
}