php报错 - 打印php错误




我如何获得PHP错误显示? (16)

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

我甚至将这些行放在脚本的顶部,它甚至不会捕获简单的分析错误。 例如,我用"$"声明变量并且不关闭语句";" 。 但是我的所有脚本都显示了这些错误的空白页面,但我希望在浏览器输出中看到错误

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

剩下的事情是什么?


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

您可以添加以下行:

php_value display_errors 1

我的问题与您的问题相同,并且此解决方案修复了此问题。


你可以做如下的事情:

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

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

更多信息请here


写吧:

error_reporting(-1);

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

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

display_errors = on

display_startup_errors = on

在你的php.ini里面:

display_errors = on

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


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

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


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

error_reporting(9999999);
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 {
    ...
}

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

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

force_display_errors

类型:int,默认值:0,在Xdebug> = 2.3中引入如果此设置设置为1,则无论PHP的display_errors设置如何,都会显示错误。

force_error_reporting

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



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

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

我通常会在我的普通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行的语法错误:语法错误,文件意外结束,预期变量(T_VARIABLE)或$ {(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)tst3.php中的{


这对我来说总是有效的:

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

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

display_errors = on

这将工作:

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

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


顶部的这个代码应该工作error_reporting(E_ALL);

然而,尝试在文件中编辑手机上的代码

error_reporting = on







error-reporting