当前位置:  开发笔记 > 编程语言 > 正文

如何显示PHP错误?

如何解决《如何显示PHP错误?》经验,为你挑选了20个好方法。

我检查了我的php.ini文件,并设置了显示错误,还有错误报告display_errors.我重新启动了我的Apache Web服务器.

我甚至把这些行放在我的脚本的顶部,它甚至没有捕获简单的解析错误.例如,我使用a声明变量,E_ALL而不是关闭语句"$".但是我的所有脚本都显示这些错误的空白页面,但我想在浏览器输出中看到错误.

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

还剩下什么?



1> Fancy John..:

这对我来说总是有用的:

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

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

display_errors = on


虽然我不是SysOps,但我认为有更多人拥有.htaccess文件而不是php.ini,这些都会在解析前出现,对吧?.htaccess的`php_flag display_errors 1`
另请注意,您可以使用这3行,然后包含('fileImWorkingOn.php');. 然后你也可以捕获语法错误!

2> Michael Mads..:

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

此问题可能会提供其他信息.



3> 小智..:

在你的php.ini里面:

display_errors = on

然后重新启动Web服务器.


①+.在我的ubuntu /etc/php5/apache2/php.ini上
for*restart*(Debian,Ubuntu等)`sudo service apache2 restart`
在OS X上重新启动`sudo apachectl -k restart`.
有趣的事实:如果您只是输入p​​hpinfo(),您可以找到加载的php.ini文件; 进入一个空白的php文件.它是第7行,称为"加载配置文件"

4> andre..:

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

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



5> 小智..:

某些Web托管提供程序允许您更改.htaccess文件中的PHP参数.

您可以添加以下行:

php_value display_errors 1

我和你的问题一样,这个解决方案修复了它.


不是`php_flag`?即:``php_flag display_errors on`
我试过这个并得到500内部服务器错误.

6> Frank Forte..:

您可能会发现"错误报告"或"显示错误"的所有设置似乎都不适用于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'];
}



7> Lead Develop..:

这将有效:




8> Abhijit Jagt..:

使用:

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

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

php -l phpfilename.php



9> 小智..:

index.php文件中设置:

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



10> 小智..:

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

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

display_errors = on

display_startup_errors = on



11> B.Balamaniga..:

这是一个PHP脚本:


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


这与Fancy John的[答案](http://stackoverflow.com/a/21429652/369450)有什么不同?

12> jxmallett..:

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

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

尽管在我的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 {
    ...
}



13> Channaveer H..:

我通常会在我的普通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 = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}



14> 小智..:

当使用PHP作为Apache模块时,我们可以使用Apache配置文件(例如httpd.conf)和.htaccess文件中的指令更改配置设置.您需要"AllowOverride Options"或"AllowOverride All"权限才能执行此操作.

检查一下

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



15> Peter..:

由于我们现在运行的是PHP 7,因此这里给出的答案不再正确.唯一还可以的就是来自Frank Forte的那个,因为他谈到了PHP 7.

另一方面,您可以使用一个技巧:使用include,而不是尝试使用try/catch捕获错误.

这里有三段代码:

文件:tst1.php


在PHP 7中运行它将不显示任何内容.

现在,试试这个:

文件:tst2.php


文件:tst3.php


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

解析错误:第4行的语法错误,意外的文件结束,期望变量(T_VARIABLE)或$ {(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)在tst3.php中



16> chiborg..:

如果你发现自己处于无法修改设置的情况,php.ini或者.htaccess当你的PHP脚本包含解析错误时你显示错误是不幸的.然后,您必须解决在命令行上单击文件,如下所示:

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

如果您的主机被锁定以至于不允许通过php.ini或更改值.htaccess,则它也可能不允许通过更改值ini_set.您可以使用以下PHP脚本检查:



17> Binit Ghetiy..:

您可以执行以下操作:

在主索引文件中设置以下参数:

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

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

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

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

对于所有错误:

    error_reporting(E_ERROR);

对于所有警告:

    error_reporting(E_WARNING);

对于所有通知:

    error_reporting(E_NOTICE);

有关更多信息,请查看此处.



18> lintabá..:

您可以添加自己的自定义错误处理程序,它可以提供额外的调试信息.此外,您可以将其设置为通过电子邮件向您发送信息.

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "Something bad happened. [$errno] $errstr 

File: $errfile
Line: $errline
".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."

"; 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");



19> Xakiru..:

如果是快速调试,则可以使用的最佳/便捷/快速解决方案是将代码与捕获的异常一起包围。这就是我想快速检查生产中的内容时要执行的操作。

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



20> Wembo Mulumb..:

上面的代码应该可以工作:

error_reporting(E_ALL);

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

error_reporting =on

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有