2009-10-29 54 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