PHP:php错误/警告/通知的双重输出
Posted
技术标签:
【中文标题】PHP:php错误/警告/通知的双重输出【英文标题】:PHP: double output of php errors / warnings / notices 【发布时间】:2014-05-12 11:42:48 【问题描述】:如果我执行以下脚本:
<?php
error_reporting(E_ALL);
trigger_error('test notice', E_USER_NOTICE);
die('end of script');
我得到以下输出:
<br />
<b>Notice</b>: test notice in <b>path/to/script/test.php</b> on line <b>3</b><br />
end of scriptPHP Notice: test notice in path/to/script/test.php on line 3
脚本是在 IIS8 上使用 PHP 版本 5.4.19 执行的。
返回的http状态码是200。
php.ini 文件中的“display_errors”设置为“On”,“error_reporting”设置为“E_ALL”。所以脚本的第一行只是为了澄清。
所有错误报告常量(E_ERROR、E_WARNING 等)的行为都相同。
有谁知道通知的第二个输出来自哪里?尤其是如何摆脱它?
【问题讨论】:
脚本开启php脚本的错误报告。有关错误,请参阅第 3 行的文件test.php
。
不知道 IIS 但命令行 PHP 将错误消息打印到 stdout 和 stderr。您的网络服务器设置似乎也是如此。
你试过评论第一行error_reporting(E_ALL);
。
是的,我试图将其注释掉。但是 error_reporting 函数只定义了哪些错误类型(级别)将被输出,而不是如果它们真的作为输出发送。 display_errors 指令定义了这一点。
【参考方案1】:
如果你同时设置了
error_reporting(E_ALL);
ini_set('display_errors', 1);
错误会加倍:
PHP 注意:未定义变量:test in /path/to/script.php 8号线
注意:未定义的变量:test in /path/to/script.php 8号线
尝试关闭其中一个或另一个或set a custom error handler。
【讨论】:
【参考方案2】:脚本的第一行
error_reporting(E_ALL);将 PHP 设置为报告所有错误,并在您的 PHP 配置中启用
display_errors
指令,该指令将 PHP 设置为打印错误屏幕,则无需复制输出的第二行。
【讨论】:
抱歉,这不是真的。 “error_reporting()”函数不输出任何内容,它只是覆盖了 php.ini 中设置的“error_reporting”指令。并且不会导致第二次输出。【参考方案3】:为了解决这个问题,我必须在 IIS 中更改站点的基本设置: “连接为”与 IIS_USER 和 php 错误消息的双重输出消失了! 我仍然不知道为什么,但至少它有效。
【讨论】:
以上是关于PHP:php错误/警告/通知的双重输出的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .htaccess 文件中禁用 PHP 中的通知和警告?