2012-09-07 28 views
3

控制檯「數據錯誤」下面的php代碼輸出。發生這種情況的原因是已知的問題,但我想擺脫錯誤信息。停止來自php函數的錯誤消息gzuncompress

<?php 
    gzuncompress("foo"); 
?> 

我搜索瞭如何在PHP取消錯誤消息在網絡上,並試圖以下,沒有成功:

<?php 
    error_reporting(0); 
    ini_set("display_errors",0); 
    ob_start(); 
    @gzuncompress("foo"); 
    ob_end_clean(); 
?> 

非常感謝您!

+2

你得到了什麼? '@'只能阻止顯示'E_WARNING'級別的消息。 –

+0

我認爲這個問題可能是一個未聲明的函數,與gzuncompress無關。也許缺少一個系統庫作爲替代方案? – Bryan

+0

我在控制檯上看到一行「數據錯誤」,僅此而已。在這些情況下,gzuncompress也會返回null。 –

回答

2

這很可能是您指定了自定義錯誤處理程序。

推理:

  1. 的ob_start()/ ob_end_clean()是在浪費時間 - 這不會剿警告信息,只有內容你通過回聲等,所以下降這兩個抽不出來線。

  2. error_reporting(0)應該足夠了 - 這就是說「關閉所有錯誤」。你不會在錯誤日誌或屏幕上看到它。但是自定義錯誤處理程序仍然會被調用。

  3. 「display_errors」將阻止它進入屏幕,但它會出現在您的日誌文件中。

  4. @也將抑制消息 - 本質上它會暫時設置「error_reporting(0)」。但是cusom錯誤處理程序仍然會被調用。

這樣得到周圍所有這些的唯一的事情是一個自定義錯誤處理程序。即使你使用@來抑制錯誤或者具有error_reporting(0),它仍會被調用。客戶錯誤處理程序本身應調用error_reporting(),如果「0」應確保它不會產生錯誤。它可能有它自己的「保存緩衝區,吐出我的消息,然後恢復緩衝區」代碼,這就是爲什麼它繞過ob_start()。

只有我能想到的重複:我剛剛通過控制檯和webbrowser/apache運行你的代碼,它是乾淨的 - 沒有警告顯示等等,如你所願。

+0

你是對的,可能就是這樣。我使用HipHop php運行php,它可能與它有關。所以我上面給出的代碼不會給你帶來錯誤?謝謝! –