无法启用php display_errors

时间:2011-05-06 13:13:33

标签: apache php

嘿,我知道有一些关于这个主题的帖子,我已经把它们全部扫了一遍!

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

我使用安装了apache2的php 5.3的虚拟盒。我已经尝试了所有我能想到的显示错误,但似乎没有任何效果。

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

display_errors = 1

并尝试了

display_errors = On

我正在使用apache站点启用的默认值是否有什么我需要在这里做这个工作?我从来没有遇到过使用mamp在我的mac上运行php的问题。

任何建议都会非常感谢,这让我疯了!

9 个答案:

答案 0 :(得分:64)

您也可以在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()错误的脚本。

答案 1 :(得分:8)

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

答案 2 :(得分:6)

实际上,在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 ,即可获得所需内容。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

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

这通常可以胜任这项工作,但如果你有一个令人讨厌的不匹配的括号,那就不够了。因此,如果它仍然不起作用,它可能依赖于一些PHP错误代码。

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

P.S。 :display_errors = 1和php.ini中的display_errors = On是等效的。

答案 5 :(得分:2)

请尝试:

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

只是为了查看它出现的时间。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

就我而言,我必须做的是

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。

答案 8 :(得分:0)

就我而言,我已将display_errors切换为On,但后来却忘记了重新启动Apache。希望这对某人有帮助!