题 如何显示PHP错误?


我检查了我的 PHP ini 设置了文件和显示错误,并且还有错误报告 E_ALL。我重新启动了我的Apache Web服务器。

我甚至把这些行放在我的脚本的顶部,它甚至没有捕获简单的解析错误。例如,我用a声明变量 "$" 而且我不会结束发言";"。但是我的所有脚本都显示了这些错误的空白页面,但我想实际看到 错误 在我的浏览器输出中。

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

还剩下什么?


1300
2018-06-27 19:09


起源


我还没有明确指出为什么它有时会起作用,而不是其他人,但是对于任何想要在PHP脚本中快速切换错误的人(或通过 $_REQUEST参数)这两行大部分时间都可以工作。 - brandonscript
你可以通过php ini文件启用xdebug来查看错误的详细信息。 - jewelhuq
在此处查找所有细节 php-show-all-errors.com - Abu Yousef


答案:


这对我来说总是有用的:

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

但是,这不会使PHP显示解析错误 - 显示这些错误的唯一方法是使用以下行修改php.ini:

display_errors = on

2530
2018-01-29 11:25



另请注意,您可以使用这3行,然后包含('fileImWorkingOn.php');.然后你也可以捕获语法错误! - Snap
这不会显示解析错误 - Bsienn
虽然我不是SysOps,但我认为有更多的人拥有.htaccess文件而不是php.ini,这些都会在解析前出现,对吧? php_flag display_errors 1 对于.htaccess - Ryan Taylor
那么现在错误被记录下来了,它们会去哪里?我去了/ var / log / apache2并显示了所有日志,但没有关于我最近运行的程序的信息。我每天早上只收到一次有关系统重启的信息。 - Michael
@Michael错误直接进入屏幕或输出重定向到的位置 - Fancy John


在运行时启用错误输出时,您无法捕获解析错误,因为它在实际执行任何操作之前解析文件(并且由于它在此期间遇到错误,因此不会执行任何操作)。您需要更改实际的服务器配置,以便启用display_errors并使用approriate error_reporting级别。如果您无法访问php.ini,则可以使用.htaccess或类似内容,具体取决于服务器。

这个问题 可能会提供其他信息。


133
2018-06-27 19:14



不知道那个。我手动编辑了php.ini文件,现在正在运行。谢谢! - Abs


你的内心 php.ini中

display_errors = on

然后重新启动Web服务器。


120
2018-01-08 09:27



+1。在我的mac上:/etc/php.ini - Shanimal
①+。在我的ubuntu /etc/php5/apache2/php.ini上 - m93a
对于 重新开始 (Debian,Ubuntu等) sudo service apache2 restart - Peter Krauss
在OS X上重新启动 sudo apachectl -k restart。 - Pea
有趣的事实:如果你只是输入p​​hpinfo(),你可以找到加载的php.ini文件;进入一个空白的php文件。这是第7排下来并打电话 Loaded Configuration File - Frankenmint


要显示您需要的所有错误:

1.在您从浏览器调用的PHP脚本中有这些行(通常是 index.php):

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

2.(a)确保此脚本没有语法错误

-要么-

2.(b)设定 display_errors = On 在你的 php.ini

否则,它甚至无法运行那两行!

您可以通过运行(在命令行)检查脚本中的语法错误:

php -l index.php

如果你 包括 然后是来自另一个PHP脚本的脚本  显示语法错误 包括 脚本。例如:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser

78
2018-01-29 09:52





一些Web托管提供商允许您更改PHP中的PHP参数 的.htaccess 文件。

您可以添加以下行:

php_value display_errors 1

我和你的问题一样,这个解决方案解决了这个问题。


39
2018-05-18 15:01



不 php_flag?即: php_flag display_errors on - PeterM
我试过这个并得到500内部服务器错误。 - posfan12


您可能会发现“错误报告”或“显示错误”的所有设置似乎都不适用于PHP 7.这是因为错误处理已更改。试试这个:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

或者,一次性捕获异常和错误(这与PHP 5不向后兼容):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

29
2018-03-28 19:26



显示回溯也很好 - Fancy John
你的意思是PHP7还是PHP7.1?我很困惑,我尝试作为验证的答案提出并且它有效,我认为你提出的东西有点不同恕我直言,确实“没有向后兼容性”,如果你必须修改一个完整的PHP <7代码,需要添加 try{} catch() {} 你已经定义的PHP代码中到处都是代码,我甚至不想想那将要发生的混乱...... - vdegenne
@FancyJohn,这可能会有所帮助: $bt = debug_backtrace(); print_r($bt);。 - Frank Forte
@ballangddang,我遇到了PHP 7.0的问题,我可以获得错误的唯一方法是使用try / catch块并特别是捕获 Error。如果你将所有请求(除了JavaScript,CSS,图像等除外)重写为index.php文件,那么在那里使用try catch块,它会更容易。是的,任何没有单一入口点的系统都是更新的主要问题。 - Frank Forte
PHP不显示未处理的异常吗?很确定吗? - Martin Tournoij


这将有效:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>

26
2018-05-05 13:23





使用:

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

这是编写它的最佳方法,但语法错误会产生空白输出,因此请使用控制台检查语法错误。调试PHP代码的最佳方法是使用控制台;运行以下内容:

php -l phpfilename.php

25
2018-05-04 19:14





创建一个名为的文件 php.ini中 在PHP文件所在的文件夹中。

在php.ini里面添加以下代码(我给出了一个显示代码的简单错误):

display_errors = on

display_startup_errors = on

15
2018-03-31 18:38





在你的设置中 的index.php

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

15
2017-09-26 12:32



是的,它的工作正常......谢谢@Sumit。 - Vikas Dobariya


这是一个PHP脚本:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

有关PHP错误的更详细说明,请访问 PHP错误 - error_reporting()


12
2018-01-11 12:37



这和Fancy John的有什么不同? 回答? - cpburnz