2009-10-29 51 views
49

我收到預期的通知和警告,並希望關閉我的PHP文件。錯誤是:關閉在php/mysql的警告和錯誤

Warning: fsockopen() 

和注意事項有:

Notice: A non well formed numeric value encountered in 

我計劃使用cron這個PHP腳本,不想取得任何記錄的所有錯誤或通知。

+4

如果你不想錯誤通過電子郵件發送給你,你可以將它的輸出指向'/ dev/null'。儘管如此,錯誤通常是有原因的 - 你可能想知道你的cron腳本何時崩潰!嘗試優雅地處理錯誤。 – ceejayoz 2009-10-29 18:43:08

+0

某處相關:http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante 2012-09-07 13:57:55

回答

137

當你確定你的腳本是完美的工作,你可以擺脫警告和通知是這樣的:將這個線在你的PHP腳本的開頭:

error_reporting(E_ERROR); 

在此之前,在工作時,你的腳本,我會建議你正確調試你的腳本,以便所有的通知或警告消失一個接一個。 所以,你應該首先將其設置爲冗長儘可能與:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

UPDATE:如何登錄,而不是顯示他們 正如意見提出錯誤,更好的方法是這樣只記錄錯誤到文件PHP開發人員看到錯誤消息,而不是用戶。 可能的實現方式是通過.htaccess文件,如果您無權訪問php.ini文件(source),則該文件很有用。

# supress php errors 
php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
php_value docref_root 0 
php_value docref_ext 0 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

不要這樣做。抑制所有錯誤是一個可怕的想法。 – ceejayoz 2009-10-29 18:41:56

+31

你正在說話,好像背誦一個口頭禪。在這個特定的用例中,這正是用戶想要的。如果他想要一個測井系統,他會問這個問題。 – pixeline 2009-10-29 19:31:35

+4

我同意ceejayoz和pixeline。但是,只應將生產環境中的error_reporting(0)設置爲安全措施,否則關鍵信息不會被錯誤地泄露給惡意用戶。使用error_reporting(0)'忽略錯誤'會帶來導致不好事情的高風險。我知道這是作者所要求的,但我會反對。 – 2009-10-29 19:53:25

2

您可以設置錯誤類型報告,你在php.ini或使用的error_reporting()函數在腳本的頂部需要。

18

使用'@'符號來預置函數來抑制某些錯誤,而不是關閉所有錯誤報告。

更多信息:http://php.net/manual/en/language.operators.errorcontrol.php

PHP支持一個錯誤控制運算符:at符號(@)。當在PHP中添加表達式時,可能會忽略可能由該表達式生成的任何錯誤消息。

@fsockopen();

+0

這通常是一個更好的解決方案,用於生產代碼,恕我直言 – billrichards 2014-03-03 18:33:13

+1

也許,「*也許*」,對於一個函數,然而用這個填充你的腳本稍後要求麻煩,因爲* something *不起作用,並且你的錯誤日誌是空的。最好的方法是設置一個箱子/開關,以便快速打開和關閉「顯示」錯誤。然後,他們關閉,dev/test可以開啓。無論哪種方式,(幾乎)總是建議記錄到錯誤日誌文件 – James 2014-11-12 20:12:40

14

始終顯示測試服務器上的錯誤。切勿在生產服務器上顯示錯誤。

編寫腳本以確定頁面是在本地,測試還是在線服務器上,並將$ state設置爲「local」,「testing」或「live」。然後:

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

如果你不能出於某種原因php.ini文件,禁用錯誤在標準輸出(display_errors)。通過添加以下行的任何目錄htaccess文件:

php_flag display_errors off

此外,您可以將錯誤記錄添加到文件:

php_flag log_errors on

13

PHP的error_reporting參考:

// Turn off all error reporting 
error_reporting(0); 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
// This is the default value set in php.ini 
error_reporting(E_ALL^E_NOTICE); 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 
+0

錯誤報告將被關閉,但其報告將被存儲在文件夾中的日誌文件中。如何停止PHP來創建日誌文件? tnx – 2015-10-05 05:48:14

+0

@MehdiJ:停止在** error_log中記錄錯誤的PHP **添加此代碼'ini_set('log_errors','off');' – 2015-11-04 09:46:21