程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中的錯誤處理

PHP中的錯誤處理

編輯:關於PHP編程

程序只要在運行,就免不了會出現錯誤!或早或晚,只是時間問題罷了。
錯誤很常見,比如Notice,Warning等等。此時一般使用set_error_handler來處理:
<?php

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    var_dump($errno, $errstr, $errfile, $errline);
});

// Notice: Use of undefined constant strlen
strlen;

// Warning: strlen() expects exactly 1 parameter, 0 given
strlen();

?>
具體能做些什麼呢?統一管理錯誤日志,或者呈現一個相對友好的錯誤提示頁面等等。
但需要注意的是set_error_handler無法捕捉某些Fatal error,比如下面這個錯誤:
<?php

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    var_dump($errno, $errstr, $errfile, $errline);
});

// Fatal error: Call to undefined function undefined_function()
undefined_function();

?>
不過我們真的就一點辦法都沒有了麼?當然不是,我們不僅有辦法,而且還有好幾種:
第一種:ob_start + error_get_last
<?php

ob_start(function($buffer) {
    if ($error = error_get_last()) {
        return var_export($error, true);
    }

    return $buffer;
});

// Fatal error: Call to undefined function undefined_function()
undefined_function();

?>
第二種:register_shutdown_function + error_get_last
<?php

register_shutdown_function(function() {
    if ($error = error_get_last()) {
        var_dump($error);
    }
});

// Fatal error: Call to undefined function undefined_function()
undefined_function();

?>
此外,所有的Parse error都無法捕捉,不過換個角度看,解析錯誤的代碼本身就不應該發布,甚至都不應該進入版本庫,關於這一點,我以前寫過一篇《Subversion鉤子》,裡面介紹了如何利用Subversion鉤子做代碼語法檢查。
似乎應該順水推舟接著寫點介紹異常的文字才好,可惜時間不早了,還是洗洗睡吧。

 

 

作者 老王

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved