通过阅读PHP规范和Stack Overflow上的其他问题,我可以看到三种从PHP发送HTTP响应代码的方法:
header("HTTP/1.0 404 Not Found");
^ ^ ^
A B C
header(" ", false, 404);
^ ^ ^
C D B
http_response_code(404);
^
B
A: Defines HTTP header
B: Response code
C: Message
D: To replace previous header or not
Run Code Online (Sandbox Code Playgroud)
这些和最好使用哪一个有什么区别?我对参数的理解是否正确?
谢谢,
Tugzrida.
为了回答你关于有什么区别的问题,我在 PHP 文档中找到了这个评论(感谢 Steven):
http_response_code
基本上是编写 http 状态标头的一种简写方式,额外的好处是 PHP 将通过将响应代码与它在 php-src/main/http_status_codes 中维护的枚举中的一个值相匹配来计算出合适的原因短语来提供。H。请注意,这意味着您的响应代码必须与 PHP 知道的响应代码相匹配。您无法使用此方法创建自己的响应代码,但可以使用标头方法。
http_response_code
总结 - 设置响应代码和header
设置响应代码的区别:
使用
http_response_code
将导致 PHP 匹配并应用硬编码到 PHP 源代码中的原因短语列表中的原因短语。由于上述第 1 点,如果您使用,
http_response_code
则必须设置 PHP 知道的代码。您无法设置自己的自定义代码,但如果使用标头方法,则可以设置自定义代码(和原因短语)。
我很好奇一些流行的框架如何在标准响应中发送标头:
// status
header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode);
Run Code Online (Sandbox Code Playgroud)
Zend Framework 2还设置原始标头:
public function renderStatusLine()
{
$status = sprintf(
'HTTP/%s %d %s',
$this->getVersion(),
$this->getStatusCode(),
$this->getReasonPhrase()
);
return trim($status);
}
Run Code Online (Sandbox Code Playgroud)
伊亦亦如此
protected function sendHeaders()
{
if (headers_sent()) {
return;
}
$statusCode = $this->getStatusCode();
header("HTTP/{$this->version} $statusCode {$this->statusText}");
// ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1357 次 |
最近记录: |