gpt4 book ai didi

php - 为什么 display_errors 会改变 HTTP 状态码?

转载 作者:可可西里 更新时间:2023-11-01 13:19:49 26 4
gpt4 key购买 nike

正如在许多其他问题中所指出的,在 php.ini 中将 display_errors 设置为 Off 会使 Web 服务器在遇到 fatal error 时以状态码 500 Internal server error 代替 200 OK 进行应答。我设置了一个带有未定义函数的简单测试来解释行为:

php.ini

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。设置为 On 时,预计会出现 PHP 错误,因此请求总体上 不是 500,即使您的脚本失败。

关于php - 为什么 display_errors 会改变 HTTP 状态码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com