通常程式發生致命錯誤的時候頁面空白,想擷取錯誤資訊也不難!主要是利用兩個函數:
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。現在我們的目的是顯示錯誤提示,那麼:
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); ?> |