关闭php / mysql上的警告和错误

时间:2009-10-29 18:27:14

标签: php mysql

我收到预期的通知和警告,并希望在我的php文件中关闭它们。错误是:

Warning: fsockopen()

和通知是:

Notice: A non well formed numeric value encountered in

我打算在这个php脚本中使用cron,并且不希望在任何地方记录任何错误或通知。

6 个答案:

答案 0 :(得分:139)

当你确定你的脚本完全正常工作时,你可以摆脱警告和通知,如下所示:把这一行放在php脚本的开头:

error_reporting(E_ERROR);

在此之前,在处理脚本时,我会建议您正确调试脚本,以便所有通知或警告逐一消失。 因此,您应首先将其设置为尽可能详细:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

更新:如何记录错误而不是显示错误 正如评论中所建议的,更好的解决方案是将错误记录到文件中,这样只有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>

答案 1 :(得分:18)

使用'@'符号预设函数以抑制某些错误,而不是关闭所有错误报告。

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

  

PHP支持一个错误控制操作符:at符号(@)。当在PHP中添加表达式时,将忽略该表达式可能生成的任何错误消息。

@fsockopen();

答案 2 :(得分: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 );
}

答案 3 :(得分:13)

PHP error_reporting reference:

// 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);

答案 4 :(得分:2)

您可以在php.ini中设置所需的错误报告类型,或者在脚本之上使用error_reporting()函数。

答案 5 :(得分:2)

如果由于某种原因无法访问php.ini文件,请通过添加以下行禁用任何目录中.htaccess文件中的stdout(display_errors)错误:

php_flag display_errors off

另外,您可以将错误记录添加到文件中:

php_flag log_errors on