2012-02-11 65 views
2

是否可以退出腳本,對致命錯誤說,仍然輸出我的緩衝區?我正在使用執行頁眉/內容/頁腳的模板系統。所以我試圖讓它停止代碼在fatal_error()函數上執行,但仍輸出緩衝區模板(它將錯誤消息發送給用戶,同時仍然維護網站模板)。我使用ob_start("ob_gzhandler")和我的fatal_error()函數我使用ob_flush(),當fatal_error()被調用時,我最終會出現白屏。這裏是我的功能PHP退出並仍然輸出緩衝區

function fatal_error($error_message, $log = true) 
{ 
    setup_error($error_message); 

    ob_flush(); 
    exit(); 
} 

setup_error()告訴的內容主體更改爲錯誤信息的腳本(所以發生錯誤時不解析1/2的機構)。我看過的所有示例都說ob_flush()ob_end_flush()可以實現這一點,但我沒有任何運氣。

回答

4

使用set_error_handler()函數。通過這種方式,您可以指定一個用戶定義的函數(在您的情況下爲fatal_error()),以在PHP遇到錯誤時執行。你可以在你的函數中做任何你喜歡的事情,包括刷新緩衝區並退出。

編輯:

下面的代碼應該做你想要什麼:

set_error_handler('fatal_error', E_ERROR, E_USER_ERROR); 

function fatal_error($errno, $errstr, $errfile, $errline) 
{ 
    ob_flush(); 
    exit(); 
} 

編輯2:

可以觸發一個E_ERROR,因此測試fatal_error()功能,像這樣:

trigger_error('This is a test error', E_ERROR); 
+0

金。謝謝。 – 2012-02-11 21:17:11

+0

不客氣:) – VettelS 2012-02-11 21:17:35

2

我會嘗試在ob_flush()之前加入flush()的呼叫。有時候,兩者都是需要的。

+0

嗯,仍然只輸出一個白色的屏幕 – 2012-02-11 21:01:39

+0

我們可以看到'setup_error()'的代碼嗎? – 2012-02-11 21:04:20

+0

糟糕,模板直到'ob_flush'之後才輸出。我看了一遍。 – 2012-02-11 21:16:48