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

Oss*_*ssi 51 php mysql

我得到了预期的通知和警告,并希望在我的php文件上关闭它们.错误是:

Warning: fsockopen()
Run Code Online (Sandbox Code Playgroud)

和通知是:

Notice: A non well formed numeric value encountered in
Run Code Online (Sandbox Code Playgroud)

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

pix*_*ine 139

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

error_reporting(E_ERROR);
Run Code Online (Sandbox Code Playgroud)

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

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
Run Code Online (Sandbox Code Playgroud)

更新:如何记录错误而不是显示它们如评论中所建议的,更好的解决方案是将错误记录到文件中,这样只有php开发人员才能看到错误消息,而不是用户.可能的实现是通过.htaccess文件,如果您无权访问php.ini文件(),则非常有用.

# 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>
Run Code Online (Sandbox Code Playgroud)

  • 你说的好像在背诵咒语.在这个特定的用例中,这正是用户想要的.如果他要求采用测井系统,他会要求它. (35认同)
  • 不要这样做.抑制所有错误是一个可怕的想法. (6认同)
  • 或者我们实际上可以指出有一些设施可以抑制stdout上的错误显示,但是将它们指向日志. (6认同)
  • 我同意ceejayoz和pixeline.但是,只应将error_reporting(0)设置为生产环境中的安全措施,以便不会将关键信息错误地泄露给恶意用户.使用error_reporting(0)来"忽略错误"会导致导致错误的高风险.我知道这是作者所要求的,但我建议反对. (4认同)

Mik*_*e B 18

使用'@'符号前置函数可以抑制某些错误,而不是关闭所有错误报告.

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

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

@fsockopen();


Dar*_*ell 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 );
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*h G 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);
Run Code Online (Sandbox Code Playgroud)