通常程序發生致命錯誤的時候頁面空白,想獲取錯誤信息也不難!主要是利用兩個函數:
error_get_last() 獲取最後一次發生錯誤信息:結構如下:
代碼如下
Array
(
[type] => 8
[message] => Undefined variable: http://www.111cn.net
[file] => C:WWWindex.php
[line] => 2
)
register_shutdown_function()在腳本停止執行時注冊一個回調函數
有了這兩個函數就可以監控致命錯誤了:
代碼如下error_reporting(E_ALL); //E_ALL
function cache_shutdown_error() {
$_error = error_get_last();
if ($_error && in_array($_error['type'], array(1, 4, 16, 64, 256, 4096, E_ALL))) {
echo '<font color=red>你的代碼出錯了:</font></br>';
echo '致命錯誤:' . $_error['message'] . '</br>';
echo '文件:' . $_error['file'] . '</br>';
echo '在第' . $_error['line'] . '行</br>';
}
}
register_shutdown_function("cache_shutdown_error");
順序附本地服務器測試方法
下面來說說顯示PHP錯誤提示消息的三個方法。
一:php.ini配置
php.ini配置中與此相關的有兩個配置變量。下面是這兩個變量及其默認值:
代碼如下display_errors = Off
error_reporting = E_ALL & ~E_NOTICE
display_errors 變量的目的很明顯 —— 它告訴PHP是否顯示錯誤。默認值是 Off。現在我們的目的是顯示錯誤提示,那麼:
代碼如下display_errors = On
E_ALL,這個設置會顯示從不良編碼實踐到無害提示到出錯的所有信息。E_ALL 對於開發過程來說有點太細,因為它連變量未初始化也顯示提示,而這一點正是PHP“高級”的一個特征。幸好,error_reporting的默認值是“E_ALL & ~E_NOTICE”,這樣就只看到錯誤和不良編碼了,對程序無不利的提示則不會顯示。
修改php.ini後需要重新啟動Apache,這樣才可以在apache中生效,當然你如果只在命令行下測試程序,是不需要這一步的。
配置php程序中
代碼如下<?php
//禁用錯誤報告
error_reporting(0);
//報告運行時錯誤
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//報告所有錯誤
error_reporting(E_ALL);
?>