set_error_handler和trigger_error函數

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
example:

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("觸發錯誤");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章