PHP headers_list()未显示所有标题
根据文档:,以及此注释:,php代码:PHP headers_list()未显示所有标题,php,list,header,status,Php,List,Header,Status,根据文档:,以及此注释:,php代码: <?php var_dump(header_list()); ?> 不显示状态标题。 这种奇怪的行为很奇怪。因此有两个问题: 为什么?(我不确定这个问题是否是基于观点的,如果是,并且没有真正的解释,请省略它。我的意思是,有时候基于观点的问题不是基于观点的,并且确实有解释,在被问到之前无法预测) 我知道我可以使用我自己的函数来设置标题,这将设置标题,另外还要记住这个标题是设置好的。但这有点。。。解决方法,正如header_list()在这
<?php var_dump(header_list()); ?>
不显示状态标题。
这种奇怪的行为很奇怪。因此有两个问题:
要发布更多的代码,只需对header函数进行简单的变通(线性而非对象,使用全局类而非静态类只是为了展示想法)。假设header函数省略了不带冒号的header(这可能不太正确…):
似乎只有状态代码从
标题列表中丢失
您可以使用另一个函数获取当前状态代码(它们可能相互覆盖):。检查,请注意,常规标题和状态代码的值是分开的:
// headers_list
SG(sapi_headers).headers
// http_response_code
SG(sapi_headers).http_response_code
但HTTP响应代码并不是唯一具有专用存储的头:
这是怎么回事?特别检查以下字符串以调整状态:
HTTP/
内容类型
内容长度
位置
WWW-Authenticate
HTTP/
是专门选中的,因为这是在PHP5.4之前显式设置状态代码的方式:之后,为清晰起见,建议使用状态代码。所使用的header()
令人困惑,因为您在这个问题中提出的原因和一般原则是:显然不包括状态行:
PHP单独处理其他文件,因为它们是单值标题,并且/或者它们的值在以后的计算中影响效率
TL;DR:
HTTP/
由header()
设置的headers\u list()
不包括在headers\u list()中,因为HTTP/
状态行不是严格意义上的头。但是对于PHP<5.4的限制,即header()
是设置HTTP/
状态的唯一方法,这可能从来都不是一个令人困惑的问题。我不知道函数在尝试发送任何内容之前应该如何知道HTTP状态。一般来说,我希望该函数列出php准备的所有头文件。由于http协议本身不是由php处理的,而是由底层http服务器处理的,php应该如何知道这一点?我同意这可能不方便。但我看不到一个技术解决方案。是的,但当您设置头('HTTP/1.1 404 not Found');很明显,状态代码将是404。。。?如果你用403覆盖它,它将是403。。。?我的意思是,您正在使用标题直接设置状态,那么为什么该标题不在列表中呢?此外,当您设置编码或其他内容时,它也在列表中。。。只有状态标题和非冒号标题不在列表中:(.我假设,出于完全相同的原因,此类标头没有直接在php内排队。最终http状态只能由http服务器设置。因此,标头的处理方式可能不同。该函数列出的标头在php内排队,请求协议相关标头可能在进程间发出信号这是http服务器和php之间的通信。就像一个“返回值”。好的,我很明白。请随意发布答案,提供更多关于该问题的信息、资源或文档,我当然会接受。谢谢您的帮助:)。不,谢谢:我只是在这里表达我的判断。这我不知道。所以这不是答案。;-)
// headers_list
SG(sapi_headers).headers
// http_response_code
SG(sapi_headers).http_response_code
SG(sapi_headers).mimetype = NULL;
header-field = field-name ":" OWS field-value OWS