2009-12-30 222 views
0

我在輸出緩衝區中遇到了一些問題。我緩衝我的腳本並使用回調打印結果。問題是如果在任何時候拋出一個錯誤,什麼都不顯示,我得到一個空白的屏幕。我曾嘗試設置我自己的自定義錯誤處理程序,但似乎沒有任何工作。我有一種感覺,這是因爲錯誤導致我的緩衝區調用回調方法,而不是我的錯誤處理程序。無論是這樣,還是因爲我有錯誤處理程序作爲一種靜態方法,但改變它會導致其他地方的問題。輸出緩衝區內部的錯誤

我真的很感激任何幫助,因爲這一個讓我難住!

public function constructor() 
{ 
    ob_start(array(__CLASS__, 'render')); 
    self::$buffer_level = ob_get_level(); 

    set_error_handler(array(__CLASS__, 'exception_handler')); 
    set_exception_handler(array(_CLASS__, 'exception_handler')); 

    RUNNING MY SCRIPT HERE 

    ob_end_flush(); 
} 

public static function exception_handler($exception, $message = NULL, $file = NULL, $line = NULL) 
{ 
    while (ob_get_level() > self::$buffer_level) 
    { 
    ob_end_clean(); 
    } 

    echo $exception.' - '.$message.' - '.$file.' - '.$line.'<br/>'; 
} 

回答

1

我建議打開PHP中的錯誤日誌記錄,默認情況下會將錯誤發送到apache錯誤日誌。你也可以嘗試打開track_errors,但我認爲日誌是最好的選擇。如果您無法訪問apache日誌,則可能需要手動記錄。

當使用輸出緩衝和其他「幕後」內容(如ajax)時,日誌文件和跟蹤策略是必不可少的。

您可能還會看看output_buffering設置。看到這篇文章:http://thinkpositivesoftware.blogspot.com/2009/03/have-blank-php-page.html