【问题标题】:Nginx sends status 200 after PHP parse errorPHP解析错误后Nginx发送状态200
【发布时间】:2013-03-04 10:26:59
【问题描述】:

我已经在 Ubuntu 上用 php-fpm 配置了 nginx(一切运行良好)。

我遇到的一件事是,当发生 PHP 解析错误时,发送了 HTTP 状态代码 200。错误日志包含以下条目:

[error] 3205#0: *2854 FastCGI sent in stderr: “PHP Parse error: syntax error, unexpected T_REQUIRE_ONCE in /var/www/.../index.php on line 32”同时从上游读取响应头,客户端:1.2.3.4,服务器:example.com;请求:“GET / HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“example.com”

我无法弄清楚,为什么不发送代码 50x。我没有配置了任何error_page设置,我阅读了documentation of error_page。我也尝试过设置状态码(error_page 500 =500 /50x.html 等等)。但总是返回状态 200。

我可以从 PHP (header('HTTP/1.1 404 Not Found')) 发送状态标头,这是可行的。但是,对于 PHP 解释器发出的错误(也包括未捕获的异常),服务器的响应没有考虑到发生了错误。

【问题讨论】:

  • 这是它在每个网络服务器上的响应方式,您确定要这样做吗?我的意思是无论如何它实际上没有任何用处,您的脚本不应该失败,并且在开发状态期间,如果您可以阅读错误,则 200 很好..,如果状态代码不是 200 较新的浏览器经常使用他们自己的错误页面,因此您无法读取错误,这会使调试更加困难
  • 不幸的是,你是对的。我刚刚注意到 mod_php 也会发送关于 PHP 错误的状态 200(解析错误,未捕获的异常)。这真的很谦虚.. 不关心如何调试错误(因为 display_errors 应该在生产中关闭),但我真的很惊讶 PHP 以错误的方式执行此操作并输出带有“OK”状态代码的错误。难怪 google 到处都是 PHP 错误信息。
  • 好吧.. 幸好不是 PHP 引起的,而是 xdebug 引起的:bugs.php.net/bug.php?id=50921

标签: linux nginx fastcgi php


【解决方案1】:

仅供参考,这已在 Xdebug (2.2) 中为 PHP 5.4 及更高版本修复。遗憾的是,它需要对 PHP 进行更改才能使其正常工作,而无法向后移植到 5.3。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2023-03-29
    相关资源
    最近更新 更多