gpt4 book ai didi

php - header() 的第一个参数无效($string)在使用第三个参数($http_response_code)时无效

转载 作者:可可西里 更新时间:2023-11-01 16:29:01 24 4
gpt4 key购买 nike

简短的问题:我可以依赖 header('.', TRUE, 404); 的行为吗? , header('.', TRUE, 501);等等?

现在,让我详细说明。

在问我的问题之前,我将介绍 header() 的一些用法。调用及其生成的相应HTTP响应码。

header('HTTP/1.1 404 Bummer!'); -- HTTP/1.1 404 Bummer!

header('HTTP/1.1 501 I am sick'); -- HTTP/1.1 501 I am sick

header('Bummer!', TRUE, 404); -- HTTP/1.1 404 Not Found

header('I am sick', TRUE, 501); -- HTTP/1.1 501 Method Not Implemented

因此,我们可以看到,如果我们使用第三个参数而第一个参数是垃圾,则第一个参数将被忽略。但是,http://php.net/manual/en/function.header.php 处的文档说:

Note that this parameter only has an effect if the string is not empty.

所以,我们还是要在第一个参数里放点东西。这对我来说有点难看,因为 $string当我们指定 $http_response_code 时被忽略在第三个参数中,但我们仍然需要为 $string 设置一些值即使它永远不会被使用。

但我能理解为什么会这样。传统上,header()仅接受参数,我们可以像前两个示例一样设置任意响应代码。第二个和第三个参数是后来作为可选参数添加的。因此,如果我们想使用第二个和第三个参数,我们必须为第一个参数指定一些内容。此外,有时我们可能需要在第一个参数中放置有效的 header ,并在第三个参数中放置有效的响应代码。我在最后包含了一个这样的例子。

所以,我计划在我的代码中以这种方式使用这个函数:header('.', TRUE, 404); , header('.', TRUE, 501);等。按照上面的示例,它将根据标准生成正确的 HTTP 响应。我想知道我是否可以依赖这种行为。我问这个问题是因为我找不到明确提到第一个参数 ( $string) 将在我们提供第三个参数 ($http_response_code) 时被忽略的文档。

顺便说一句,我知道第一个参数在这种情况下很有用。

header('Foo: Bar', TRUE, 501);导致:

HTTP/1.1 501 Method Not Implemented
Date: Sun, 09 Oct 2011 19:01:19 GMT
Server: Apache/2.2.20 (Debian)
X-Powered-By: PHP/5.3.8-1
Foo: Bar
Vary: Accept-Encoding
Connection: close
Content-Type: text/html

一个更实际的例子是header('Location: <a href="http://example.com/there/" rel="noreferrer noopener nofollow">http://example.com/there/</a>', TRUE, 307);这会产生:

HTTP/1.1 307 Temporary Redirect
Date: Sun, 09 Oct 2011 19:09:29 GMT
Server: Apache/2.2.20 (Debian)
X-Powered-By: PHP/5.3.8-1
Location: http://example.com/there/
Vary: Accept-Encoding
Content-Type: text/html

不管怎样,回到我的问题。我可以依赖 header('.', TRUE, 404); 的行为吗? , header('.', TRUE, 501);等等?

最佳答案

不确定您是否正在寻找这个,但我猜您不想构建 HTTP 状态行:

header('.', TRUE, 501);

让我的 Apache 返回这个状态行:

HTTP/1.1 500 Internal Server Error

但是

header(' ', TRUE, 501);

让我的 Apache 返回这个状态行:

HTTP/1.1 501 Not Implemented

这可能是您正在寻找的。

也许您只想构建状态行?

header('HTTP/1.1 501 No Implementation for you :)');

这让我的 Apache 返回这个状态行:

HTTP/1.1 501 No Implementation for you :)

传统上,它是这样做的:

header('HTTP/1.1 501');

然后获取一些默认状态行消息文本:

HTTP/1.1 501 Method Not Implemented

这不会改变协议(protocol)版本:

header('HTTP/1.0 404');

因为它给出了:

HTTP/1.1 404 Not Found

希望这对您有所帮助。


Susam 更新:

在 PHP 5.4 中,一种简单而优雅的方法是:

http_response_code(404);

http_response_code(501);

关于php - header() 的第一个参数无效($string)在使用第三个参数($http_response_code)时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705867/

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