![](/img/trans.png)
[英]why does this syntax error return HTTP error 500 when 'display_errors' is on?
[英]Why does display_errors change the HTTP status code?
正如许多其他问题所指出的,在 php.ini 中将 display_errors 设置为 Off 会使 Web 服务器在遇到致命错误时以状态代码 500 内部服务器错误而不是 200 OK 回答。 我使用未定义的函数设置了一个简单的测试来解释行为:
配置文件
display_errors = On
索引.php
<?php test();
给出:
Fatal error: Call to undefined function test()
in D:\xampp\htdocs\index.php on line 1
或者只是一个空白页,如果我像这样使函数调用静音:
<?php @test();
在这两种情况下,答案标题如下:
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 20:08:22 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
将 php.ini 更改为:
display_errors = Off
原因:
HTTP/1.0 500 Internal Server Error
Date: Tue, 10 Jul 2012 20:10:35 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Content-Length: 0
Connection: close
Content-Type: text/html
任何人都可以向我解释当 display_errors 关闭时使 Web 服务器回答 500 的底层机制吗?
原因是使用display_errors = On
,您实际上是在要求 PHP 为您提供合适的 HTTP 响应,即使您的脚本中存在错误。 将其视为脚本和响应之间的附加层。 控制输出的不再是您的脚本,而是 PHP。
当你打开这个选项时,你实际上是在说:“如果有错误,请仍然给我一个有效的 HTTP 响应页面(它甚至可能包含适当的标记),因为我将查看它而不是我的日志。 ”
将它设置为Off
,HTTP 响应应该是无意义的,因此是 500。当它打开时,预计会出现 PHP 错误,因此即使您的脚本失败,整个请求也不是 500。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.