PHP headers_list()未显示所有标题

PHP headers_list()未显示所有标题,php,list,header,status,Php,List,Header,Status,根据文档:,以及此注释:,php代码: <?php var_dump(header_list()); ?> 不显示状态标题。 这种奇怪的行为很奇怪。因此有两个问题: 为什么?(我不确定这个问题是否是基于观点的,如果是,并且没有真正的解释,请省略它。我的意思是,有时候基于观点的问题不是基于观点的,并且确实有解释,在被问到之前无法预测) 我知道我可以使用我自己的函数来设置标题,这将设置标题,另外还要记住这个标题是设置好的。但这有点。。。解决方法,正如header_list()在这

根据文档:,以及此注释:,php代码:

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

不显示状态标题。


这种奇怪的行为很奇怪。因此有两个问题:

  • 为什么?(我不确定这个问题是否是基于观点的,如果是,并且没有真正的解释,请省略它。我的意思是,有时候基于观点的问题不是基于观点的,并且确实有解释,在被问到之前无法预测)
  • 我知道我可以使用我自己的函数来设置标题,这将设置标题,另外还要记住这个标题是设置好的。但这有点。。。解决方法,正如header_list()在这里非常肯定的那样。此外,这些头文件位于php引擎内存中的某个位置,因此在脚本中再次保存它们并不能节省内存。所以获取所有标题的后门是什么,没有下面的解决方法那么愚蠢?这可能很有用,例如,作为调试/开发人员类的一部分,它在页面末尾将所有“开发人员”数据呈现为html注释。当然,我省略了content-length标题,这一点还为时过早
  • 此函数似乎忽略了所有没有冒号的标题。。。是这样吗?

  • 要发布更多的代码,只需对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