PHP解析错误不会显示

5
我正在运行ubuntu 10.04 + nginx + php-fpm 5.4。
如果我在php.ini中设置display_errors = On,则会打印所有错误。如果我将其设置为关闭,然后在脚本中直接使用ini_set('display_errors, '1');,它们也会显示,但不包括解析错误,只是一个空白页面。我尝试调整error_reporting和E_STRICT,但我找不到解决方法!
5个回答

20
如果在php.ini中禁用了display_errors,然后再使用ini_set()在你的PHP脚本中启用它,它只会在包含该ini_set()调用的行执行后才被启用
解析错误发生在PHP脚本甚至开始之前--当解析PHP文件时(因此称为"解析错误")
这意味着它们发生在你的ini_set()有机会被执行之前 - 这意味着在你的情况下,当解析错误发生时,display_errors没有启用;因此,你不会看到显示任何信息。

2
那么显示解析错误的唯一解决方案就是在ini文件中启用它? - Sandro Antonucci
似乎相当合理 - 而且有点符合 http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors 上的第二个注释 *(虽然那里说了 "fatal",但概念是一样的)*。 - Pascal MARTIN
是的,我已经添加(取消注释)了以下行,现在解析错误正在显示。error_reporting 默认值:E_ALL&〜E_NOTICE&〜E_STRICT&〜E_DEPRECATED 开发值:E_ALL 生产值:E_ALL&〜E_DEPRECATED&〜E_STRICT - Tinsae

10

虽然这个问题已经解决多年,但是我找到了一个解决方法。

对于我正在编写的脚本,我创建了第二个脚本,其中包括ini_set()指令,然后包含我正在处理的脚本。

这里是test_run.php

<?php

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

include('./my_script.php');

?>

1
對此表示讚賞;我在使用apache+php7時遇到了這個問題,即使我已經在.htaccess中設置了php_flag display_errors on,但它似乎太晚啟動,我沒有收到錯誤報告。當然,我不想在整個站點啟用它,只想在該目錄中啟用,這個解決方法允許我以這種方式“包裹”腳本的調試版本。 - Avenger
1
这实际上非常有帮助,你应该得到比这更多的积分! - Jason Hitchings
你救了我的一天! - Massimo Nicolardi
我不知道为什么直到现在我才发现这个。虽然它不是正确的调试方法,但它可以节省时间。 - Paun Narcis Iulian

3
除了打开display_errors之外,您还可以查看错误日志。通常情况下,在运行Ubuntu + apache时,您的错误日志将在/var/log/apache2/error_log中。要实时观察发生的情况,您可以运行类似于tail -f /var/log/apache2/error_log的命令。
这有时比纠结于php设置更加直接。

这个问题是关于nginx而不是apache的。 - Frug

0

你必须在php.ini文件中启用错误显示

我已经添加(取消注释)了以下行,现在解析错误正在显示。

error_reporting 
Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 
Development Value: E_ALL
Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

-1
尝试使用 error_reporting(E_ALL);。或者查看文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接