【问题标题】:How to display PHP errors when using Lighttpd and Fast-CGI?使用 Lighttpd 和 Fast-CGI 时如何显示 PHP 错误?
【发布时间】:2013-01-06 10:56:17
【问题描述】:

我正在使用 FastCGI 运行 Lighttpd 网络服务器,并且网络服务器不输出 PHP 解析错误。

我的 php.ini 文件有以下设置:

error_reporting = E_ALL
display_errors = Off
display_startup_errors = Off
log_errors = On
html_errors = On

我在这样的 PHP 脚本中启用错误输出以进行开发(其他环境有冗余):

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

大多数错误输出正常。解析错误不会。下面是引发解析错误的示例代码。该错误不是由 Lighttpd 网络服务器输出的,而是在从命令行执行时,因为它没有使用 FastCGI。 (注意缺少连接运算符):

<?php echo 'foo' 'bar'; ?>

我发现如果我在 php.ini 中设置 display_errors = On,然后使用 FastCGI 和 Lighttpd 正确解析错误输出,但是我无法在我的 PHP 脚本中使用 ini_set( 'display_errors', 0 ) 将它们关闭。

我希望在开发应用程序时能够在我的应用程序中显示这些,并且能够在不更改 php.ini 配置的情况下将它们关闭以进行生产。使用 FastCGI 时是否无法在我的 PHP 应用程序中执行此操作?

【问题讨论】:

    标签: php syntax-error runtime-error fastcgi lighttpd


    【解决方案1】:

    感谢 Jake 的回答,这真的很有帮助。但是我想补充一点,创建 .user.ini 文件并添加代码行对我不起作用。

    我将这些行添加到 .user.ini 文件中:

    error_reporting = E_ALL
    display_errors = On
    html_errors = On
    display_startup_errors = On
    log_errors = On
    

    在这之后我能够看到错误并解决了问题。

    【讨论】:

    • 请下次尝试编辑 Jake 的答案(或在 cmets 中提出建议),而不是添加非常相似的答案...
    【解决方案2】:

    没有显示错误的原因是因为当代码中出现致命错误时(例如您的示例),代码根本不会执行,因此永远不会设置 display_errors 值。

    来自 php.net (http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors):

    虽然 display_errors 可以在运行时设置(使用 ini_set()),但如果脚本有致命错误,它不会有任何影响。这是因为没有执行所需的运行时操作。

    我发现的一个解决方案是在您正在开发并希望看到错误输出的目录中使用 .user.ini 文件(它们的功能类似于 Apache 的 .htaccess 文件)。没有很好的方法来修改 PHP 代码以显示致命错误,因为包含致命错误的代码永远不会运行。

    因此,对于上面的示例,您可以使用与包含以下行的 php 文件位于同一目录中的 .user.ini 文件:

    error_reporting = -1
    display_errors = On
    html_errors = On
    

    欲了解更多信息,请参阅http://php.net/manual/en/configuration.file.per-user.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-22
      • 2014-11-18
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      相关资源
      最近更新 更多