2012-10-21 93 views
1

在開發我的網站時,我啓用了錯誤報告功能。但每次生成錯誤時,都會在頁面頂部生成,並位於開始標記之前。這有時會打破文件,並改變網站的諸多方面,如表現和元素的顯示方式。在頁面底部而不是頂部打印錯誤?

有什麼辦法收集所有的錯誤,並將它們全部顯示在頁面底部?

謝謝堆!

+2

您應該查找['set_error_handler'](http://php.net/manual/en/function.set-error-handler.php)。 –

+0

錯誤發生後繼續執行代碼是否真的有意義?假設您在選擇查詢中發生錯誤,其結果用於調用更新查詢 - 盲目繼續將導致數據損壞。 (編輯:見[快速失敗](http://en.wikipedia.org/wiki/Fail-fast)。) – DCoder

+1

沒有錯誤主要是警告和通知,如未定義的變量。如果這是一個致命的錯誤,無論如何它會停止頁面。 – SteppingHat

回答

2

例如,您可以創建自己的錯誤處理程序並將所有錯誤收集到文件中。或者進入數組,然後按照您的要求顯示頁面底部的所有錯誤。

下面是它應該怎麼走:在使用本

<?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 />"; 
     } 
    } 
?> 
+0

它吐出錯誤:解析錯誤:語法錯誤,意想不到的'getCollectedErrors'(T_STRING),預計變量(T_VARIABLE)在第6行的C:\ xampp \ htdocs \ major \ global.php – SteppingHat

+0

對不起,只是忘了添加'函數'關鍵字= P – shybovycha

+0

它將錯誤帶走,但不顯示在底部。 – SteppingHat

0

我不知道把他們都在頁面的底部,但你可以做的是所有的錯誤信息發送到這樣的錯誤文件:

error_reporting(E_ALL); 
ini_set('display_errors', 'off'); 
ini_set('log_errors', 'on'); 
ini_set('error_log', 'path/to/error/file.log'); 

此外,當您」重新進行編碼和測試,您可以在IDE中保持打開文件,並在每次測試後檢查它是否發生新錯誤。

相關問題