2011-08-30 96 views
0

我正在使用以下代碼進行日誌記錄並將錯誤發送至我的電子郵件,但我不知道爲什麼$content變量在檢查我的電子郵件時不包含任何內容。這是範圍錯誤嗎?或者我做錯了什麼?爲什麼ob_get_clean()在函數體中不起作用?

ob_start(); 
set_error_handler('cs_handler', E_ALL); 

//a lot includes and method calls here 

function cs_handler($errno, $errstr, $errfile, $errline) 
{ 
    $content = ob_get(); 
    mail(...., 'Error Happend: '.$content); 
} 

回答

2

一個問題是,你需要再打電話ob_start(),刷新緩衝區後,如果您要多個錯誤,每頁的正常工作。這可能是問題嗎?您是否收到一封包含內容的電子郵件,其他人沒有?

您可能遇到的另一個問題是,當您期待3(地址,主題,內容)時,您打電話給mail()帶有2個參數。你可能想是這樣的:

mail('[email protected]', 'Error Happened', $content); 

注意,如預期了以下工作:

ob_start(); 
set_error_handler('cs_handler', E_ALL); 

echo 'begun'; 

echo $arr['test']; // This throws a warning, handled by the function below 

function cs_handler($errno, $errstr, $errfile, $errline) 
{ 
    $content = ob_get_clean(); 
    mail('[email protected]', 'Error Happened', $content); 
} 
+0

不,我只是想獲得一個電子郵件,會得到一個,但沒有空$內容 –

+0

你的意思是你需要一封電子郵件,其中包含在LAST錯誤時腳本的所有輸出,或包含腳本在FIRST錯誤點輸出的單個電子郵件,或者您是以某種方式保證只有一個錯誤會發生由這個腳本拋出? –

+0

對不起,我必須更清楚,我希望我的電子郵件中的每個錯誤和'$ content'。 (所以我可能有3個錯誤,如果$內容郵寄3次沒有問題,因爲這只是一個臨時的錯誤調試) –

相關問題