![]() |
1
394
我刚发现这个问题,觉得需要更全面的答案: 至于 PHP 5.4 实现这一点有三种方法: 自行组装响应代码(php>=4.0)
这个
但是,这需要对(快速)CGI PHP进行特殊处理:
注: 根据 HTTP RFC , the 原因短语 可以是任何自定义字符串(符合标准),但为了客户端兼容性,我 不 建议在此处放置随机字符串。
注:
头函数的第三个参数(php>=4.3)在使用第一个变体时,显然存在一些问题。我认为其中最大的一点是,它部分是由PHP或Web服务器解析的,并且文档记录得很差。
自4.3以来,
我推荐第二个 . 第一 做 在我测试过的所有浏览器上都可以使用,但是一些次要的浏览器或网络爬虫可能会遇到标题行只包含冒号的问题。第2个中的标题字段名。变体当然不是以任何方式标准化的,可以修改,我只是选择了一个有希望的描述性名称。 http_response_code函数(php>=5.4)
这个
这就是全部。 兼容性
当我需要低于5.4的兼容性,但需要“新”的功能时,我准备了一个函数。
|
![]() |
2
32
不幸的是,我发现@dualed提供的解决方案有很多缺陷。
这里有完整的HTTP响应状态代码列表供您参考(此列表包括来自IETF Internet标准以及其他IETF RFC的代码)。php http_response_code函数目前不支持其中的许多功能): http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 您可以通过调用以下命令轻松测试此Bug:
服务器将发送“500内部服务器错误”HTTP响应代码,如果您有一个自定义客户端应用程序调用您的服务器,并期望一些额外的HTTP代码,则会导致意外错误。 我的解决方案(对于4.1.0以后的所有PHP版本):
结论 http_response_code()实现不支持所有http响应代码,可能会用同一组中的另一个代码覆盖指定的http响应代码。 新的http_response_code()函数并不能解决所有涉及的问题,但会使引入新bug的情况变得更糟。 @dualed提供的“兼容性”解决方案无法按预期工作,至少在php-fpm下是这样。 @dualed提供的其他解决方案也有各种错误。快速CGI检测不处理php-fpm。必须检测当前协议。 感谢所有测试和评论。 |
![]() |
3
11
从php 5.4开始,您可以使用
这里有一个例子:
下面是php.net中此函数的文档: |
![]() |
4
7
在主体的任何输出之前添加这一行,以防不使用输出缓冲。
将消息部分(“OK”)替换为适当的消息,将状态代码替换为适当的代码(404、501等)。 |
![]() |
5
6
如果你在这里是因为WordPress在加载环境时给出了404,这应该可以解决问题:
问题是由于它发送了一个状态:404 Not Found头。你必须超越它。 这也适用于:
|
![]() |
7
1
HTTP响应代码(200);由于测试警报404而不起作用 https://developers.google.com/speed/pagespeed/insights/ |
![]() |
8
0
我们可以通过两种不同的环境从HTTP响应代码中获得不同的返回值:
在Web服务器环境中,如果提供了响应代码或没有提供任何响应代码,则返回以前的响应代码,然后将打印当前值。默认值为200(确定)。 在cli环境中,如果提供了响应代码,则返回true;如果不提供任何响应代码,则返回false。 响应代码返回值的Web服务器环境示例:
响应代码返回值的cli环境示例:
|
![]() |
Niet the Dark Absol · 什么响应代码适合这种情况? 12 年前 |