我有一台运行带有PHP 5的Apache2的Ubuntu服务器。在php.ini中我设置了error_reporting = E_ALL | E_STRICT
和error_reporting = E_ALL | E_STRICT
,但PHP仍然没有显示错误消息。我也在使用Apache虚拟主机。
此外,PHP5.3提供的最严格的错误报告是什么?我希望我的代码尽可能地保持最新和面向未来。
答案 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 restart
或apache2ctl 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。
2)进入网站,双击错误页面,单击500状态,单击编辑功能设置,更改错误响应详细错误,单击确定
答案 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。