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

我甚至把这些行放在了脚本的顶部,它甚至不能捕捉到简单的解析错误。例如,我用“$”声明变量,而不关闭语句“;”。但我的所有脚本都显示了这些错误的空白页面,但我希望在浏览器输出中看到这些错误。

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

还有什么要做?


当前回答

如果是快速调试,您可以使用的最佳/简单/快速解决方案是用捕获异常包围代码。当我想在生产中快速检查一些东西时,这就是我正在做的。

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

其他回答

如果是快速调试,您可以使用的最佳/简单/快速解决方案是用捕获异常包围代码。当我想在生产中快速检查一些东西时,这就是我正在做的。

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

您可以执行以下操作:

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

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

有关详细信息,请查看此处。

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

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "<b>Something 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");

在Unix CLI中,只将错误重定向到文件是非常实用的:

./script 2> errors.log

在脚本中,可以像往常一样使用var_dump()或等效方法(STDOUT和STDERR都将接收输出),但只能在日志文件中写入:

fwrite(STDERR, "Debug infos\n"); // Write in errors.log^

然后从另一个shell中进行实时更改:

tail -f errors.log

或者干脆

watch cat errors.log

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

此问题可能提供其他信息。