2012-11-17 49 views
2

好吧,首先,我已經搜索了近40分鐘,並且找不到對具體問題的答案。我明白它最好修復錯誤,但這不是問題。在php中抑制2048錯誤

我需要做的是讓php NOT報告2048錯誤。原因是,我繼承了一個網站,我需要設置一個關閉功能來捕捉致命錯誤並向我發送短信。所有這一切都很好。然而,代碼不斷拋出2048錯誤,所以當我的關機功能命中最後拋出的錯誤總是2048而不是實際的致命錯誤。我不需要關閉顯示錯誤,因爲這不是問題。它是我關心的後端處理。

我已經通過關閉錯誤報告來測試這個。當我這樣做時,我得到了預期的結果,但這意味着我無法在服務器上記錄其他錯誤。我只是想讓它忽略2048個錯誤,我認爲這是E_STRICT。然而,我的錯誤報告只設置爲E_ERROR,我不認爲E_STRICT包含在那。

那麼,如何讓php完全停止報告2048錯誤,所以他們不會覆蓋我的實際致命錯誤?但請E_ERROR,這樣我就可以在服務器上登錄其他錯誤...

編輯

這是解決...排序:

我仍然不知道如何正確地抑制該錯誤或爲什麼error_reporting()影響error_get_last。但是,仍然可以在服務器上記錄錯誤時忽略該錯誤的基本問題已得到解決。我只是將錯誤報告完全關閉,並將錯誤報告添加到我的關閉功能中,以手動將數據寫入日誌文件。

這裏是我使用的所有非致命錯誤代碼:

 $message="\n[".date('d-M-Y H:i:s',time())."] PHP Notice: ".$e['message']." in ".$e['file']." on line ".$e['line']; 
     $file=dirname(__FILE__) . '/error_log-'.date("m-d-Y").'.txt'; 
     file_put_contents($file, $message, FILE_APPEND | LOCK_EX); 

這不是我一直在尋找的答案,但它解決了我的問題,我仍然有興趣知道,如果沒有人真的知道如何關閉e_strict報告,以便它不會出現在error_get_last()中。

和平。

+0

您是否嘗試確保它不是:** error_reporting(E_ALL&〜E_STRICT); **,例如。也許php.ini有錯誤或正在啓用E_STRICT。 –

+0

我明確地設置error_reporting(E_ALL);在代碼中。我試過了:error_reporting(E_ALL&〜E_STRICT);和error_reporting(E_ALL^E_STRICT);他們都沒有工作。他們只能用於顯示錯誤並將其記錄到服務器。但不是爲什麼得到php報告error_get_last – Chris

+0

對不起,我的意思是我設置它error_reporting(E_ERROR);不是e_all – Chris

回答

0

如何設置錯誤報告級別,如果設置爲E_ERROR,則跳過E_STRICT

error_reporting(E_ERROR); 
+0

這就是我的想法,但無論什麼原因,當我在shutdown函數中調用error_get_last時,它會給我E_STRICT錯誤,而不是致命錯誤。 – Chris

+0

@Chris'error_get_last'不會受'error_reporting'設置的影響,您需要通過'$ error ['type']&error_reporting()=== 0'來確定是否忽略錯誤。 – xdazz

+0

當我設置error_reporting(0)它會影響它。所以必須有一些相關性。我正在檢查它,以便它只發送致命錯誤的文本消息。但是,從來沒有發生過,因爲最後的錯誤總是E_STRICT。即使我故意設置了一個致命錯誤,只要error_reporting設置爲off以外的任何值,關閉功能仍會嚴格限制爲最後一個錯誤。 – Chris

0

修改php.ini文件與此

E_ALL & ~E_STRICT 

這將顯示除E_STRICT所有的錯誤..

OR

在你的PHP文件

error_reporting(E_ALL | E_STRICT); 

更多知識訪問PHP NET http://php.net/manual/en/migrating5.errorrep.php

+0

試圖..它適用於在屏幕上顯示錯誤。但error_get_last仍會註冊嚴重錯誤。 – Chris