我如何得到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()如何,都可以强制显示某些错误。