无法启用 php display_errors

Posted

技术标签:

【中文标题】无法启用 php display_errors【英文标题】:Cannot get php display_errors enabled 【发布时间】:2011-08-20 04:43:44 【问题描述】:

嘿,我知道有一些关于这个主题的帖子,我已经搜索了所有帖子!

无论我做什么,我都无法在 php 中启用 display_errors 设置!!!

我正在使用安装了 php 5.3 并运行 apache2 的虚拟机。我已经尝试了我能想到的一切来让显示错误正常工作,但似乎没有任何工作。

我在我的 .htaccess 文件中设置了 php_flag display_errors 我什至直接在 php.ini 文件中启用了它

display_errors = 1

也试过了

display_errors = On

我正在使用启用 apache 站点的默认设置,我需要在这里做些什么来让它工作吗?我从来没有遇到过使用 mamp 在我的 mac 上运行 php 的问题。

任何建议都将不胜感激,这让我发疯了!

【问题讨论】:

【参考方案1】:

您通常也可以在您的 PHP 脚本中启用它:

ini_set("display_errors", 1);
ini_set("track_errors", 1);
ini_set("html_errors", 1);
error_reporting(E_ALL);

如果这没有帮助,请先尝试快速解决方法:

set_error_handler("var_dump");

如果它被其他情况抑制,可用于复制原始行为。

请记住,这只适用于启用运行时错误。如果您怀疑解析错误,您肯定必须在php.ini / .htaccess / .user.ini 中启用错误显示。 -- 否则,使用上述说明制作包装器 test.php 脚本,然后 include() 错误脚本。

【讨论】:

哦,将var_dump 设置为错误处理程序是一个 的想法。谢谢! ini_set("display_errors", 1);在我的 index.php 中设置它已经打开,这很奇怪,因为这是我尝试的第一件事,以前没有用。奇怪的是没有其他办法让它工作,尽管它似乎已经解决了问题,但感谢您的回答! 对于那些像我一样无法在ini级别安全更改显示错误的人来说,解析错误的包装器想法成功了! 救了我的命,谢谢!我不记得有多少次我无法输出错误,但是这个可以解决问题! 脚本内解决方案无法捕获语法错误。如果它默认关闭,这将显示一条通用的服务器错误消息,这可能是语法错误的结果,但也可能由其他问题(如文件权限、SELinux 上下文等)产生。【参考方案2】:

其实在php.ini两个地方可以遇到display_errors。错误地您可以启用第一个,但它被最后一个 display_errors = Off 覆盖(这种误导性的事情发生在我身上)。

文件中有先出现的块:

;;;;;;;;;;;;;;;;;;;
; Quick Reference ;
;;;;;;;;;;;;;;;;;;;
; The following are all the settings which are different in either the production
; or development versions of the INIs with respect to PHP's default behavior.
; Please see the actual settings later in the document for more details as to why
; we recommend these changes in PHP's behavior.

; display_errors
;   Default Value: On
;   Development Value: On
;   Production Value: Off

最后一次出现的display_errors 在文件中要低得多:

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
; Possible Values:
;   Off = Do not display any errors
;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
;   On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = Off

请务必更改display_errors的最后一次出现。只需将其设置为display_errors = On重新启动 Apache 即可获得所需的内容。

【讨论】:

谢谢。在过去的一个小时里,我试图打开display_errors,但无济于事...文件开头的快速参考令人沮丧,提示您将其设置在错误的位置...【参考方案3】:

display_errors:

虽然display_errors 可以在运行时设置(使用ini_set()),但如果脚本出现致命错误,它不会有任何影响。这是因为没有执行所需的运行时操作。

因此,如果您正在处理不显示错误的问题并且您的脚本中可能存在语法错误,那么通过 ini_set 设置显示错误将无济于事,这需要更改 php.ini

sudo sed -i 's/display_errors = Off/display_errors = On/' /etc/php5/apache2/php.ini

【讨论】:

刚刚删除了最后一个 ` 字符 ;) 它确实有帮助。谢谢:)【参考方案4】:

我通常使用(在我尝试调试的 PHP 脚本中):

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

这通常可以完成工作,但如果你有一个令人讨厌的无与伦比的括号,那就不够了。所以如果它仍然不能工作,它可能取决于一些 PHP 错误代码。

甚至可能是您编辑了错误的 php.ini:使用 phpinfo() 并在“加载的配置文件”和“已解析的其他 .ini 文件”下搜索部分。

附: : php.ini 中的display_errors = 1display_errors = On 是等价的。

【讨论】:

【参考方案5】:

试试error_reporting = E_ALL。另外,您确定您正在编辑正确的 php.ini 吗?

【讨论】:

我正在编辑 /etc/php5/apache php.ini,据我所知,这是唯一的 ini 文件,对吗? Mike:在 Debian 或 Ubuntu 服务器上通常是的。【参考方案6】:

请尝试:

grep "display_errors" /etc/php5/apache2/php.ini

只是为了检查它出现了多少次。

【讨论】:

谢谢@Roman Petit。这总是一个好主意。如果有多个条目,第二个设置会覆盖第一个。【参考方案7】:

对于尝试过这些但没有任何效果的任何人,请确保您正在编辑正确的配置文件 /opt/lampp/etc/php.ini 而不是 /etc/php/php.ini

【讨论】:

【参考方案8】:

就我而言,我必须做的是

set_error_handler(NULL);
<the code to debug on screen>
restore_error_handler();

我定义了一个自定义错误处理程序,它完全绕过了默认的 PHP 错误处理程序。然而,我不想永久删除我的自定义错误错误处理程序。因此,我使用set_error_handler(NULL); 将error_handler 重置为其默认值。我使用restore_error_handler(); 取回了我原来的自定义error_handler。

【讨论】:

【参考方案9】:

就我而言,我已将 display_errors 切换为 On,但之后我忘记重新启动 Apache。希望这可以帮助某人!

【讨论】:

以上是关于无法启用 php display_errors的主要内容,如果未能解决你的问题,请参考以下文章

无法启用 php display_errors

无法在 Chrome 中的 PHP 中启用错误报告

无法启用 mysqli 扩展 - PHP 7.1.12,无法连接到数据库

无法在 Linux 上的 PHP 中启用 cURL 支持

即使我编辑了 php.ini 并且 php_ldap.dll 在正确的位置,也无法启用 PHP LDAP?

无法使用 ddev 为 php7.4 启用 php-gmp