事情是这样子的:
前一段时间,网站php出错后,具体的错误信息,没有显示出来,以为是输出到NGINX的错误日志里了,但是NGINX的错误日志没有PHP的错误信息,只有一些系统错误。
搞了很久,最后是通过改php-fpm.conf 配置,将PHP错误直接输出在浏览器里。
一开始我是改php.ini 里 的:
display_errors=On
但是没有效果。后来测试,原来是php-fpm.conf里的配置会覆盖php.ini。这个只能在php-fpm.conf里改。
但是我想不明白 为什么nginx里的错误日志 没有记录PHP的,且PHP出错时返回的http状态码是200,而不是500?
后来我整理了php-nginx的流程
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了
我用的是5.2版本,那就是 php输出的错误日志 给其他应用截断了,造成错误信息 没有输出到nginx的错误日志里
经过验证,原来是给xdebug截断了,关掉xdebug,日志恢复正常,PHP出错也是显示500了。