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

PHP not displaying errors even though display_errors = On

提问人:wowpatrick 提问时间:6/26/2011 最后编辑:Cedric Ipkisswowpatrick 更新时间:3/4/2021 访问量:148668

问:

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

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

PHP Apache 错误报告

评论

0赞 Rakesh Sankar 6/27/2011
确保检查文件,大多数错误都记录在那里。error_log

答:

4赞 user456814 6/26/2011 #1

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

此外,在 ini 文件中,确保 display_errors = 已打开,但仅限于开发环境,而不是在生产计算机中。

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

评论

0赞 6/26/2011
@wow至少能够在错误日志中看到错误消息?
98赞 Ray 6/27/2011 #2

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

display_errors = On

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

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

如果这可行,则代码中前面的内容是禁用错误显示。

评论

4赞 Arvin 6/27/2011
一开始我也错过了,但问题标题说是.display_errorsOn
0赞 Zappa 11/11/2011 #3

我知道这个线程很旧,但我刚刚解决了我的 Ubuntu 服务器的类似问题,并认为我会在这里添加一个注释来帮助其他人,因为这个线程是 Google 中 PHP 不显示错误主题的第一页。

我在 php.ini 中尝试了 error_reporting 值的几种配置设置。从 E_ALL |E_STRICT E_ALL和E_NOTICE,但没有一个奏效。我没有在浏览器中显示任何语法错误(这在开发服务器上相当烦人)。将error_reporting设置更改为“E_ALL”后,一切开始工作。不确定这是否是 Ubuntu Oneric 特定的问题,但在重新启动 Apache 后,服务器提供的 HTML 页面中开始出现错误。似乎额外的选项令人困惑,所有错误报告都停止了。HTH somone else.

评论

0赞 Jeremy Harris 1/16/2012
我希望这是解决我问题的方法(我在 Ubuntu 11.04 上),但可惜,它没有。当 Windows 上的 XAMPP 安装没有显示错误的问题时,这是很可悲的,但在 PHP 的原生环境中,我们什么也得不到。:(
7赞 Bartek Kosa 5/25/2012 #4

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

0赞 PhlegmaticFraggle 6/29/2012 #5

我刚刚遇到了同样的问题,事实证明我的问题不在于php.ini文件,而只是以普通用户的身份启动apache服务器。一旦我执行了“sudo /etc/init.d/apache2 restart”,就显示了我的错误。

18赞 vk23 2/23/2013 #6

我遇到了同样的问题,终于解决了。我的错误是我试图更改 /etc/php5/cli/php.ini,但后来我在这里找到了另一个php.ini:/etc/php5/apache2/php.ini,更改了 display_errors = On,重新启动了 Web 服务器,它工作了!

也许这对像我这样心不在焉的人来说会有所帮助。

评论

6赞 Developerium 12/30/2014
哇,没有意识到我在浪费我的一天,我用了> php -i |grep“php.ini”显示我错误的目录!
1赞 sebix 4/5/2015
@tinybyte 因为这将在 CLI 上显示 PHP 的 ini,而不是 CGI。
1赞 Johnz 4/29/2013 #7

确保您要修改的php.ini位于 /etc/php5/apache2 文件夹中,否则它不会有任何影响......

1赞 kayahr 5/14/2013 #8

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

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

下面是一个示例:

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

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

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

评论

1赞 familymangreg 5/1/2015
非常感谢您确定这一点,我在使用 chrome 时遇到了同样的问题。但实际上,我也在Firefox中遇到了问题。此行在 eventDateAndPerformancesSelectOptions 函数中不显示错误:<?php foreach ($this->SIL()->eventDateAndPerformanceSelectOptions($event) as $value => $text): ?>,但 <?php $this->SIL()->eventDateAndPerformanceSelectOptions($event) ?> 显示错误。因此,它在标准 <?php ?> 中确实如此,但在 foreach 中却没有。在 Chrome 和 Firefox 中进行了测试,并获得相同的结果。一次要注意。
0赞 hiszpan 2/12/2014 #9

我在使用 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

(标志不见了)=

评论

0赞 hiszpan 2/12/2014
这个connet应该 stackoverflow.com/questions/5526983/...
3赞 Tomek 5/4/2014 #10

虽然这是旧帖子... 我也有类似的情况,让我头疼。 最后,我想我在index.php中包含了带有“@include ...” “@”隐藏所有错误,即使display_errors处于开启状态

4赞 fremsoft 7/5/2015 #11

检查标志,必须是 ,但在 Plesk 的某些版本中,有引号 () 而不是 (error_reportingE_ALL"E_ALL"E_ALL)

我解决了这个问题,删除了引号 ()"php.ini

由此:

error_reporting = "E_ALL"

对此:

error_reporting = E_ALL

评论

1赞 Spot 11/1/2016
需要明确的是,这对您有用的原因是E_ALL是一个全局常量,而不是字符串。#goodtoknow
1赞 mgutt 2/27/2017 #12

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

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

0赞 mikaelovi 11/9/2017 #13

虽然这个线程很旧,但仍然如此,我觉得我应该从这个 stackoverflow 答案中发布一个很好的答案。

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

这确实拯救了我几个小时试图让事情开始工作。我希望这对某人有所帮助。

0赞 naw103 2/7/2018 #14

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

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

标准错误模式

2)转到该站点,双击“错误页面”,单击“500”状态,单击“编辑功能设置”,将“错误响应更改为详细错误”,单击“确定”

将错误响应更改为详细错误

0赞 mswd745 4/10/2018 #15

我也遇到了这个问题。最后,我找到了解决方案。我正在使用 UBUNTU 16.04 LTS。

1)打开文件(在PHP版本下,但会在版本文件下),找到部分并设置以下值。/ect/php/7.0/apache2/php.ini/etc/phpapache2/php.iniERROR HANDLING AND LOGGING{display_error = On, error_reporting = E_ALL}

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

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

0赞 WH Back 10/22/2019 #16

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

0赞 habib 11/27/2019 #17

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

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

但是,PHP错误仍然没有显示在网页上。我只是重新启动我的apache服务器,这个问题得到了解决。