我如何得到PHP错误显示?

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

我甚至把这些行放在我的脚本的顶部,它甚至不能捕捉简单的parsing错误。 例如,我用"$"声明variables,并且不closures语句";" 。 但是我所有的脚本都显示了这些错误的空白页面,但是我想在浏览器输出中看到错误

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

还剩下什么?

这总是适合我:

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

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

 display_errors = on 

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

这个问题可能会提供更多信息。

在你的php.ini里面:

 display_errors = on 

然后重新启动您的Web服务器

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

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

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

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

-要么-

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

否则,它甚至不能运行这两行!

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

 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 

一些虚拟主机提供商允许您更改.htaccess文件中的PHP参数。

您可以添加以下行:

 php_value display_errors 1 

我有和你一样的问题,这个解决scheme解决了这个问题。

这将工作:

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

您可能会发现“错误报告”或“显示错误”的所有设置在PHP 7中都不起作用。这是因为error handling已更改。 试试这个:

 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']; } 

或者,一次性捕获exception和错误(这不是向后兼容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']; } 

使用:

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

这是编写它的最好方法,但语法错误会给出空白输出,所以使用控制台检查语法错误。 debuggingPHP代码的最好方法是使用控制台; 运行以下内容:

 php -l phpfilename.php 

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

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

 display_errors = on display_startup_errors = on 

这是一个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()

当使用PHP作为Apache模块时,我们可以使用Apacheconfiguration文件(例如httpd.conf)和.htaccess文件中的指令来更改configuration设置。 您将需要“AllowOverride选项”或“AllowOverride All”权限才能这样做。

检查这个

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

如果您以某种方式发现自己处于无法通过php.ini.htaccess修改设置的情况,那么当您的PHP脚本包含分析错误时,显示错误的运气不是很好。 然后你必须解决这个命令行上的文件 :

 find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors" 

如果您的主机如此locking以至于不允许通过php.ini.htaccess更改该值,则也可能不允许通过ini_set更改该值。 你可以用下面的PHP脚本来检查:

 <?php if( !ini_set( 'display_errors', 1 ) ) { echo "display_errors cannot be set."; } else { echo "changing display_errors via script is possible."; } 

如果尽pipe遵循了上述所有的答案(或者您不能编辑您的php.ini文件),仍然无法获得错误消息,请尝试创build一个新的PHP文件来启用错误报告,然后包含问题文件。 例如:

 error_reporting(9999999); ini_set('display_errors', 1); require_once('problem_file.php'); 

尽pipe在我的php.ini文件中正确设置了一切,但这是唯一可以捕获命名空间错误的方法。 我确切的情况是:

 //file1.php namespace a\b; class x { ... } //file2.php namespace c\d; use c\d\x; //Dies because it's not sure which 'x' class to use class x { ... } 

你可以做如下的事情:

在主索引文件中设置下面的参数

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

然后根据您的要求,您可以select要显示的内容:

对于所有错误,警告和通知

  error_reporting(E_ALL); OR error_reporting(-1); 

所有错误

  error_reporting(E_ERROR); 

所有警告

  error_reporting(E_WARNING); 

所有通知

  error_reporting(E_NOTICE); 

更多信息请点击这里

设置在你的index.php

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

我通常会在我的普通php项目中使用下面的代码,这些代码非常小,如果项目变得很大,我会推荐。

 if(!defined('ENVIRONMENT')){ define('ENVIRONMENT','DEVELOPMENT'); } $base_url = null; if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'DEVELOPMENT': $base_url = 'http://localhost/product/'; ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(E_ALL|E_STRICT); break; case 'PRODUCTION': $base_url = 'Prod url'; /* https://google.com */ error_reporting(0); /* Mechanism to log errors */ break; default: exit('The application environment is not set correctly.'); } } 

希望这可以帮助。

正如我们现在运行PHP7,这里给出的答案是不正确的了。 唯一还算可以的是Frank Forte,他谈到了PHP7。 另一方面,不是试图用try / catch来捕捉错误,而是使用一个技巧:use include。 这里有3个代码:

文件:tst1.php

 <?php error_reporting(E_ALL); ini_set('display_errors','On'); // Missing " and ; echo "Testing ?> 

在PHP7中运行它将不会显示任何内容

现在,试试这个:

文件:tst2.php

 <?php error_reporting(E_ALL); ini_set('display_errors','On'); include ("tst3.php"); ?> 

文件:tst3.php

 <?php // Missing " and ; echo "Testing ?> 

现在运行tst2设置错误报告,然后包括tst3。 你会看见:

在第4行的tst3.php中parsing错误:语法错误,文件意外结束,期待variables(T_VARIABLE)或$ {(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)

您可以添加自己的自定义error handling程序,它可以提供额外的debugging信息。 此外,您可以将其设置为通过电子邮件发送给您。

 function ERR_HANDLER($errno ,$errstr, $errfile, $errline){ $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br> <b>File:</b> $errfile <br> <b>Line:</b> $errline <br> <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>"; echo $msg; return false; } function EXC_HANDLER($exception){ ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine()); } function shutDownFunction() { $error = error_get_last(); if ($error["type"] == 1) { ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]); } } set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); register_shutdown_function("shutdownFunction"); set_exception_handler("EXC_HANDLER"); 

只要写:

 error_reporting(-1); 

如果是快速debugging,您可以使用的最佳/简单/快速的解决scheme是用捕获exception来包围代码。 当我想要在生产中快速检查时,就是这样做的。

 try { //Page code } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } 

我希望这有帮助。

这就是我学到的东西。 在PHP.INI文件中

 error_reporting = E_ALL display_errors = On 

上面的代码应该工作error_reporting(E_ALL);

但是,尝试编辑文件中的手机上的代码

error_reporting = on

如果您安装了xdebug,您可以通过设置来覆盖每个设置:

 xdebug.force_display_errors = 1; xdebug.force_error_reporting = -1; 

force_display_errors

types:int,默认值:0,在Xdebug> = 2.3中引入如果这个设置被设置为1,那么无论PHP的display_errors是什么设置,都会显示错误。

force_error_reporting

types:int,默认值:0,在Xdebug> = 2.3中引入这个设置是一个位掩码,就像error_reporting。 该位掩码将与由error_reporting表示的位掩码进行逻辑“或”运算,从而确定应显示哪些错误。 此设置只能在php.ini中进行,无论应用程序使用ini_set()如何,都可以强制显示某些错误。