gpt4 book ai didi

PHP headers_list() 不显示所有标题

转载 作者:搜寻专家 更新时间:2023-10-31 20:37:28 24 4
gpt4 key购买 nike

根据文档:http://php.net/manual/en/function.headers-list.php ,以及这条评论:http://php.net/manual/en/function.headers-list.php#110330 , php代码:

<?php var_dump(header_list()); ?>

不显示状态标题。


这种奇怪的行为很奇怪。所以有两个问题:

  1. 为什么?(我不确定这个问题是否基于观点,如果是,并且没有真正的解释请忽略它。我的意思是有时基于观点的问题不是观点基于,并且确实有解释,并且在他们被询问之前无法预测)。
  2. 我知道我可以使用我自己的函数来设置 header ,这将设置 header 并另外记住该 header 已设置。但这是一种...解决方法,因为 header_list() 非常确定HERE, FOR THAT。此外,这些 header 位于 php 引擎内存中的某个位置,因此在脚本中第二次保存它们的内存效率不高。所以...获取所有 header 的后门是什么,而不是像下面的解决方法一样愚蠢?这可能很有用,例如作为呈现所有“开发人员”的调试/开发人员类的一部分"数据作为页面末尾的 html 注释。 当然,我省略了内容长度 header ,现在还无法预测。
  3. 看起来这个函数省略了所有没有冒号的标题...对吗?

要发布更多代码,头函数的简单解决方法(线性而不是对象,使用全局变量而不是静态类只是为了展示这个想法)。假设 header 函数省略了没有冒号的 header (这可能不完全正确...):

<?php
// Mechanism:
$headers = array();
function setHeader($header) {
header($header);
if (strpos($header, ':') === false) {
global $headers;
$headers[] = $header;
}
}
function getHeaders() {
global $headers;
return array_merge($headers, header_list());
}

// Example:
setHeader('HTTP/1.1 404 Not Found');
var_dump(getHeaders());
?>

最佳答案

检查 engine source for headers_list and http_response_code ,请注意通用 header 和状态代码的值是分开的:

// headers_list
SG(sapi_headers).headers

// http_response_code
SG(sapi_headers).http_response_code

但 HTTP 响应代码并不是唯一具有专用存储的 header :Content-Type does, too :

SG(sapi_headers).mimetype = NULL;

那么这里发生了什么? complete header() algorithm专门检查以下字符串以调整状态:

  • HTTP/
  • 内容类型
  • 内容长度
  • 位置
  • WWW-Authenticate

HTTP/ 被特别检查,因为这是在 PHP 5.4 之前明确设置状态代码的方式:在那之后,http_response_code可用并为清楚起见建议使用。 header() 被使用令人困惑,因为你在这个问题中问的原因和一般原则:http header BNF显然不包括状态行:

header-field   = field-name ":" OWS field-value OWS

PHP 单独处理其他 header ,因为它们是单值 header 和/或它们的值对以后计算的效率很重要。

TL;DR:header() 设置的 HTTP/ 不包含在 headers_list() 中,因为 HTTP/ 状态行不是严格 RFC 意义上的 header 。但是对于 header() 是设置 HTTP/ 状态的唯一方法的 PHP < 5.4 限制,它可能从来都不是一个令人困惑的问题。

关于PHP headers_list() 不显示所有标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31555392/

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