2013-12-13 52 views
0

我正在做一個小程序,當發生錯誤時需要讀取錯誤信息。如何將php錯誤信息讀入字符串變量

例如,觸發一個操作中的錯誤,和PHP日誌記錄它爲:

PHP Fatal error: Smarty error: [in /mnt/n2my_web/templates/ja_JP/mail/reservation_create.t.txt line 16]: syntax error: mismatched tag {/if}. (Smarty_Compiler.class.php, line 2338) in /mnt/n2my_web/lib/Smarty/Smarty.class.php on line 1092 

我知道通過設置的ini_set( '的display_errors', '1');可以打印錯誤消息。但我需要閱讀它才能格式化它。

通過哪種方法可以實現這一目標?任何答覆表示讚賞。 :)

+0

你想知道一般的錯誤或致命錯誤的具體情況,這是一個完全不同的問題,不能像正常錯誤一樣對待嗎? –

+0

嗨邁克,實際上在這個項目中的錯誤將永遠是聰明的錯誤,也就是說所有的錯誤應該是php致命錯誤。 – Sarotti

回答

0

真的可以訪問圍繞一個致命的錯誤的任何錯誤信息的唯一方式是使用register_shutdown_function()嘗試捕捉這些錯誤和腳本終止之前與他們合作。這不是100%可靠的。

register_shutdown_function(function() { 
    $last_error = error_get_last(); 
    if(!is_null($last_error) && $last_error['type'] === E_ERROR) { 
     /* 
     Do something with $last_error info. 
     $last_error will contain array with keys as follows: 
     ['type']['message']['file']['line'] 
     */ 
    } 
}); 
+0

嗨邁克,我的腳本終止在調用smarty功能。所以我在調用smarty函數之前只放了一行** register_shutdown_function()**,看起來不起作用。然後我把它放在我自己的功能的開始,也是行不通的。在哪裏註冊應該是個問題? – Sarotti

+0

邁克,你的回答是對的,但我想除非** ini_set('display_errors','1'); **被設置,否則錯誤信息將不會被返回。我不確定,在我的練習中,如果未設置** display_errors **,我無法從** error_get_last(); **中獲取消息 – Sarotti

2
+1

值得注意的是'error_get_last()'對於比'E_WARN'更嚴重的任何事情都不會有好處,因爲那時執行會停止。 – Sammitch

+0

嗨egig,謝謝你的推薦。至於這個問題,Sammitch說應該考慮終止點。我認爲這是我明確的原因混淆,謝謝。 – Sarotti