如何在使用Lighttpd和Fast-CGI时显示PHP错误?

T. *_*nes 6 php runtime-error fastcgi lighttpd syntax-error

我使用FastCGI运行Lighttpd网络服务器,网络服务器不输出PHP解析错误.

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

error_reporting = E_ALL
display_errors = Off
display_startup_errors = Off
log_errors = On
html_errors = On
Run Code Online (Sandbox Code Playgroud)

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

error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
ini_set( 'html_errors', 'On' );
Run Code Online (Sandbox Code Playgroud)

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

<?php echo 'foo' 'bar'; ?>
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

没有显示错误的原因是因为当代码中存在致命错误(例如您的示例)时,代码根本不会执行,因此从不设置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
Run Code Online (Sandbox Code Playgroud)

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