在開發我的網站時,我啓用了錯誤報告功能。但每次生成錯誤時,都會在頁面頂部生成,並位於開始標記之前。這有時會打破文件,並改變網站的諸多方面,如表現和元素的顯示方式。在頁面底部而不是頂部打印錯誤?
有什麼辦法收集所有的錯誤,並將它們全部顯示在頁面底部?
謝謝堆!
在開發我的網站時,我啓用了錯誤報告功能。但每次生成錯誤時,都會在頁面頂部生成,並位於開始標記之前。這有時會打破文件,並改變網站的諸多方面,如表現和元素的顯示方式。在頁面底部而不是頂部打印錯誤?
有什麼辦法收集所有的錯誤,並將它們全部顯示在頁面底部?
謝謝堆!
例如,您可以創建自己的錯誤處理程序並將所有錯誤收集到文件中。或者進入數組,然後按照您的要求顯示頁面底部的所有錯誤。
下面是它應該怎麼走:在使用本
<?php
// At the top of your PHP code
class MyError
{
protected static $collected = array();
public static function getCollectedErrors()
{
return self::$collected;
}
protected static function addError($key, $error)
{
if (!isset(self::$collected[$key]))
self::$collected[$key] = array();
self::$collected[$key][] = $error;
}
// CATCHABLE ERRORS
public static function captureNormal($number, $message, $file, $line)
{
// Insert all in one table
$error = array('type' => $number, 'message' => $message, 'file' => $file, 'line' => $line);
// Display content $error variable
self::addError('error', $message . " at " . $file . ':' . $line);
}
public static function captureException($exception)
{
// Display content $exception variable
self::addError('exception', $exception);
}
// UNCATCHABLE ERRORS
public static function captureShutdown()
{
$error = error_get_last();
if($error) {
## IF YOU WANT TO CLEAR ALL BUFFER, UNCOMMENT NEXT LINE:
# ob_end_clean();
// Display content $error variable
self::addError('shutdown', $error);
} else { self::addError('shutdown', '<none>'); return true; }
}
}
set_error_handler(array('MyError', 'captureNormal'));
set_exception_handler(array('MyError', 'captureException'));
register_shutdown_function(array('MyError', 'captureShutdown'));
?>
然後,你可以得到訪問所有的錯誤,按類別:
Error::getCollectedErrors();
UPD:要顯示的錯誤在頁面底部,將此代碼添加到要輸出錯誤的位置:
<?php
$errors = MyError::getCollectedErrors();
foreach ($errors as $category => $items) {
echo "<strong>" . $category . ":</strong><br />";
foreach ($items as $error) {
echo $error . "<br />";
}
}
?>
它吐出錯誤:解析錯誤:語法錯誤,意想不到的'getCollectedErrors'(T_STRING),預計變量(T_VARIABLE)在第6行的C:\ xampp \ htdocs \ major \ global.php – SteppingHat
對不起,只是忘了添加'函數'關鍵字= P – shybovycha
它將錯誤帶走,但不顯示在底部。 – SteppingHat
我不知道把他們都在頁面的底部,但你可以做的是所有的錯誤信息發送到這樣的錯誤文件:
error_reporting(E_ALL);
ini_set('display_errors', 'off');
ini_set('log_errors', 'on');
ini_set('error_log', 'path/to/error/file.log');
此外,當您」重新進行編碼和測試,您可以在IDE中保持打開文件,並在每次測試後檢查它是否發生新錯誤。
您應該查找['set_error_handler'](http://php.net/manual/en/function.set-error-handler.php)。 –
錯誤發生後繼續執行代碼是否真的有意義?假設您在選擇查詢中發生錯誤,其結果用於調用更新查詢 - 盲目繼續將導致數據損壞。 (編輯:見[快速失敗](http://en.wikipedia.org/wiki/Fail-fast)。) – DCoder
沒有錯誤主要是警告和通知,如未定義的變量。如果這是一個致命的錯誤,無論如何它會停止頁面。 – SteppingHat