即使display_errors = On,PHP也不显示错误

时间:2011-06-25 20:46:14

标签: php apache error-reporting

我有一台运行带有PHP 5的Apache2的Ubuntu服务器。在php.ini中我设置了error_reporting = E_ALL | E_STRICTerror_reporting = E_ALL | E_STRICT,但PHP仍然没有显示错误消息。我也在使用Apache虚拟主机。

此外,PHP5.3提供的最严格的错误报告是什么?我希望我的代码尽可能地保持最新和面向未来。

17 个答案:

答案 0 :(得分:75)

您还需要确保您的php.ini文件包含以下设置,否则错误将仅发送到默认设置的日志或虚拟主机配置中指定的日志。

display_errors = On

php.ini文件是服务器上所有PHP的基本设置,但是这些文件可以轻松地在PHP代码中的任何位置被覆盖和更改,并影响更改后的所有内容。一个好的检查是将display_errors指令添加到php.ini文件中。如果您没有看到错误,但正在记录错误,请将其插入文件顶部,从而导致错误:

ini_set('display_errors', 1);
error_reporting(E_ALL);

如果这样可行,那么代码中的某些内容会禁用错误显示。

答案 1 :(得分:12)

我有同样的问题,最后解决了。我的错误是我试图更改 /etc/php5/cli/php.ini ,但后来我在这里发现了另一个php.ini: /etc/php5/apache2/php.ini < / em>,更改了display_errors = On,重新启动了网络服务器,它运行良好!

对于像我这样心不在焉的人来说,这可能会有所帮助。

答案 2 :(得分:7)

我在使用Parallels Plesk Panel 10.4.4的虚拟服务器上遇到了同样的问题。解决方案是(感谢Zappa的想法)将error_reporting值设置为32767而不是E_ALL。 在Plesk: 主页&gt;订阅&gt; (选择域名)&gt;自定义&gt; PHP设置&gt; error_reporting - 输入自定义值 - 32767

答案 3 :(得分:3)

虽然这是老帖子...... 我有类似的情况让我头痛。 最后,我认为我在index.php中包含子页面&#34; @include ...&#34; &#34; @&#34;即使display_errors为ON,也会隐藏所有错误

答案 4 :(得分:2)

更新php.ini文件中的配置时,可能必须重新启动apache。尝试运行apachectl restartapache2ctl restart,或类似的东西。

此外,在您的ini文件中,请确保您拥有display_errors = on,但仅限于开发环境,而不是生产计算机。

此外,最严格的错误报告正是您所引用的E_ALL | E_STRICT。您可以在the php docs找到有关错误级别的更多信息。

答案 5 :(得分:1)

只是想在这里添加另一个陷阱,以防有人发现这个问题与我的问题类似。

当您使用Chrome(或Chromium)并且PHP触发位于HTML属性内的PHP代码中的错误时,Chrome会删除整个HTML元素,因此您无法在浏览器中看到PHP错误。

以下是一个例子:

<p>
  <a href="<?=missingFunc()?>">test</a>
</p>

在Chrome中调用此代码时,您只会获得一个包含起始<p>标记的HTML文档。其余的都没有了。此<p>之后没有错误消息,也没有其他HTML代码。这是 PHP问题。当您在Firefox中打开此页面时,您可以看到错误消息(查看HTML代码时)。这是一个Chrome问题。

不知道某处是否有解决方法。当你遇到这种情况时,你必须在Firefox中测试页面或检查Apache错误日志。

答案 6 :(得分:1)

检查error_reporting标记,必须为E_ALL,但在某些Plesk版本中,引号("E_ALL")代替(E_ALL

我在"

中解决了此问题删除引号php.ini

来自:

error_reporting = "E_ALL"

到此:

error_reporting = E_ALL

答案 7 :(得分:1)

我遇到了同样的问题,但我在故障脚本本身中使用了ini_set('display_errors', '1');,因此它永远不会触发致命/语法错误。最后,我通过将其添加到我的.htaccess来解决它:

php_value auto_prepend_file /usr/www/{YOUR_PATH}/display_errors.php

display_errors.php:

<?php
ini_set('display_errors', 1);
error_reporting(-1);
?>

由此我没有被迫更改php.ini,将其用于特定子文件夹并可以轻松地再次禁用它。

答案 8 :(得分:0)

我也遇到同样的问题,我的php.inni文件中有以下设置

display_errors = On
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

但是,PHP错误仍未显示在网页上。我刚刚重新启动apache服务器,此问题已解决。

答案 9 :(得分:0)

对我来说,我通过删除相对文件夹中的php_errors.txt文件解决了它。然后,下次运行代码时会再次自动创建文件,并且这次会打印错误。

答案 10 :(得分:0)

我也遇到过这个问题。最后我找到了解决方案。我使用的是UBUNTU 16.04 LTS。

1)打开/ect/php/7.0/apache2/php.ini文件(在/etc/php下可能有不同版本的PHP但apache2/php.ini将在版本文件下),找到ERROR HANDLING AND LOGGING部分和设置以下值{display_error = On, error_reporting = E_ALL}

注意 - 在QUICK REFERENCE部分下,也可以找到这些值指令,但不要改变,只是我告诉的部分有变化。

2)重启Apache服务器sudo systemctl restart apache2

答案 11 :(得分:0)

在使用ISS的Windows上运行PHP时,需要设置ISS中的一些配置设置以防止显示通用默认页面。

1)双击FastCGISettings,单击PHP然后单击编辑。将StandardErrorMode设置为ReturnStdErrLn500。

StandardErrorMode

2)进入网站,双击错误页面,单击500状态,单击编辑功能设置,更改错误响应详细错误,单击确定

Change Error Responses to Detailed Errors

答案 12 :(得分:0)

虽然这个帖子虽然陈旧但仍然存在,但我觉得我应该从this stackoverflow answer发出一个好的答案。

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

这确实在我试图让事情发挥作用后节省了我的时间。我希望这有助于某人。

答案 13 :(得分:0)

我遇到了与Apache和PHP 5.5相同的问题。 在php.ini中,我有以下几行:

error_reporting E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors Off

而不是以下内容:

error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors=Off

=标志丢失)

答案 14 :(得分:0)

确保您正在修改的php.ini位于/ etc / php5 / apache2文件夹中,否则它将没有任何效果......

答案 15 :(得分:0)

我刚刚遇到了同样的问题,结果发现我的问题不在php.ini文件中,而是简单地说,我是以普通用户身份启动apache服务器。一旦我执行了“sudo /etc/init.d/apache2 restart”,我的错误就会显示出来。

答案 16 :(得分:0)

我知道这个帖子已经老了,但我刚刚用我的Ubuntu服务器解决了一个类似的问题,并认为我会在这里添加一个注释来帮助其他人,因为这个帖子是Google的第一页,主题是PHP没有显示错误。

我在php.ini中为error_reporting值尝试了几个配置设置。来自E_ALL | E_STRICT到E_ALL&amp; E_NOTICE并没有工作。我没有在浏览器中显示任何语法错误(这在开发服务器上很烦人)。将error_reporting设置更改为“E_ALL”后,它们全部开始工作。不确定它是否是Ubuntu Oneric特定问题但在重新启动Apache错误后开始显示服务器正在服务的HTML页面。似乎额外的选项让事情变得混乱,所有错误报告都停止了。 HTH somone else。