PHP即使使用error_reporting(0)也会回显错误的原因是什么?

What are the reasons why PHP would echo errors, even with error_reporting(0)?

提问人:Valdemarick 提问时间:9/17/2008 最后编辑:Peter MortensenValdemarick 更新时间:4/22/2020 访问量:48613

问:

PHP会强制显示错误,不管你告诉它禁用什么,是什么原因?

我试过了

error_reporting(0);
ini_set('display_errors', 0); 

没有运气。

php 错误报告 ini-set

评论

0赞 Jeremy 9/17/2008
我不知道这个答案,但如果可能的话,如果您提供在关闭报告的情况下显示的错误示例,可能会有所帮助。
0赞 Valdemarick 9/17/2008
解析错误:语法错误,意外T_VARIABLE,在第 11 行的 /usr/home/johnq/public_html/dev.php 中期待 ',' 或 ';' dev.php中唯一的 PHP 是这样的: <?php error_reporting(0);echo “test” $test = “123”; ?>
0赞 GZipp 1/2/2011
如果没有该错误消息,您可能需要更长的时间才能意识到您的脚本没有运行,只是因为缺少分号。

答:

15赞 Adam Wright 9/17/2008 #1

请注意手册中 http://uk.php.net/error_reporting 处的警告:

E_STRICT大多数错误都是在编译时评估的,因此此类错误不会在文件中报告error_reporting以包含E_STRICT错误(反之亦然)。

如果基础系统配置为报告E_STRICT错误,则这些错误可能会在考虑代码之前输出。别忘了,error_reporting/ini_set是运行时评估,在“运行前”阶段执行的任何操作都不会看到其效果。


根据您的评论,您的错误是...

解析错误:语法错误,意外T_VARIABLE,在第 11 行的 /usr/home/REDACTED/public_html/dev.php 中需要 ',' 或 ';'

那么同样的一般概念也适用。您的代码永远不会运行,因为它在语法上无效(您忘记了“;”)。因此,永远不会遇到错误报告的更改。

要解决此问题,需要更改系统级错误报告。例如,在 Apache 上,您可以放置...

php_value error_reporting 0

在.htaccess文件中以全部禁止它们,但这取决于系统配置。

实际上,不要编写带有语法错误的文件:)

0赞 Vinko Vrsalovic 9/17/2008 #2

使用log_errors来记录它们,而不是显示它们。

评论

0赞 Valdemarick 9/17/2008
<?php ini_set('error_log','/error_log');ini_set('log_errors',TRUE);echo “test” $test = “123”; ?> 不幸的是,仍然会导致同样的错误。我正在寻找一种在不修改php.ini的情况下做到这一点的方法。这可能吗?
3赞 Willem 9/18/2008 #3

要防止显示错误,您可以

  • 写一个 .htaccess: php_flag display_errors 0
  • 将代码拆分为单独的模块,其中 main(父)PHP 文件仅设置 error_logging,然后 include() 的 其他文件。
0赞 troelskn 9/19/2008 #4

如果在 Apache 中使用 php_admin_value 指定了该设置,则无法在 .htaccess 中或在运行时更改该设置。

请参见: 如何更改配置设置

1赞 khalid 1/2/2011 #5

使用 phpinfo 查找加载的php.ini并对其进行编辑以隐藏错误。它会覆盖您在脚本中输入的内容。

1赞 komodosp 6/10/2013 #6

是否在脚本中的任何位置使用?这将覆盖 .set_error_handler()error_reporting(0)

0赞 ob-ivan 12/7/2015 #7

实际上,不要编写带有语法错误的文件:)

若要确保文件中没有语法错误,请运行以下命令:

php -l YOUR_FILE_HERE.php

这将输出如下内容:

PHP Parse error:  syntax error, unexpected '}' in Connection.class.php on line 31
0赞 dheerendra 12/16/2017 #8

只需在index.php文件中添加以下代码:

ini_set('display_errors', False);