嘿,我知道有一些关于这个主题的帖子,我已经把它们全部扫了一遍!
无论我做什么,我都不能在php中启用display_errors设置!!!
我使用安装了apache2的php 5.3的虚拟盒。我已经尝试了所有我能想到的显示错误,但似乎没有任何效果。
我在我的.htaccess文件中设置了php_flag display_errors,我甚至直接在php.ini文件中启用了它
display_errors = 1
并尝试了
display_errors = On
我正在使用apache站点启用的默认值是否有什么我需要在这里做这个工作?我从来没有遇到过使用mamp在我的mac上运行php的问题。
任何建议都会非常感谢,这让我疯了!
答案 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
(使用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。希望这对某人有帮助!