我正在寻找最佳解决方案,如何禁用已包含文件中报告的已知警告(以及我的脚本的无关警告)。
包含文件的简短示例:
$ cat incl_file.php
<?php
error_reporting(E_ALL);
ini_set("display_errors", "on");
$x = $y;
?>
所需代码的示例(不阻止显示包含文件中的错误)
$ cat main2.php
<?php
error_reporting(E_ALL);
ini_set("display_errors", "on");
@include_once "incl_file.php";
$d=$e;
print "main_file\n";
?>
输出:
$ php main2.php
Notice: Undefined variable: y in /tmp/php_hack/incl_file.php on line 6
Notice: Undefined variable: e in /tmp/php_hack/main2.php on line 7
main_file
以下“解决方法”有效,但我对它的混乱感到不满意:
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}
//print "called $errstr\n";
/* Don't execute PHP internal error handler */
return true;
}
set_error_handler("myErrorHandler");
error_reporting(0);
ini_set("display_errors", "off");
include_once "incl_file.php";
restore_error_handler();
error_reporting(E_ALL);
ini_set("display_errors", "on");
$d=$e;
print "main_file\n";
?>
输出:
$ php main.php
Notice: Undefined variable: e in /tmp/php_hack/main.php on line 24
main_file
如果包含的文件没有
error_reporting(E_ALL);
ini_set("display_errors", "on");
然后@运算符按预期工作......
答案 0 :(得分:3)
@
运算符仅适用于使用它的表达式。它无法禁用包含文件的错误报告。当PHP无法包含文件时,我会隐藏警告。
答案 1 :(得分:1)
错误抑制运算符@
可用于运算符,条件甚至语言结构。但是,虽然它可用于函数或方法调用,但在声明函数或类时不能使用它。
只是隐藏错误,但错误仍然存在!
见这个例子。
<?php
@require_once("xxccc.php"); // FATAL error occurred (error won't be printed!)
// and program exits without error since the error
// suppression operator.
echo "Hello"; // This won't be printed on the screen.
答案 2 :(得分:0)
禁用警告通常不是一个好主意。您可以使用三元运算符来修复未定义变量通知:
$variable = isset($variable) ? $variable : '';
如果你把它放在应该设置变量的代码之后,并且在使用变量之前,它将定义它是否尚未定义。
答案 3 :(得分:0)
如果您不想要php,可以通过多种方式抑制错误,例如在.htacces中使用:
php_flag display_errors off
无论如何@
是不好的做法,并且还在每个文件中设置不同的错误报告
你应该有一些配置文件,你要说明你想看到或不想看的错误,以及发布时的幕后,不要显示它们,可能是安全漏洞,空白页仍然更好。
if($state == "testing" )
{
ini_set( "display_errors", "1" );
error_reporting( E_ALL & ~E_NOTICE );
}
else
{
error_reporting( 0 );
}