php 标题查询不到,PHP headers_list()未显示所有标题

不显示状态标题.

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

>为什么呢? (我不确定这个问题是否是基于观点的,如果没有,请省略它.我的意思是有时基于观点的问题不是基于观点的,确实有解释,而这是无法预测的在被问到之前).

>我知道我可以使用自己的函数来设置标头,该标头将设置标头,并且还要记住已设置了此标头.但这是一种…解决方法,因为header_list()可以肯定在这里.此外,这些标头位于php引擎内存中的某个位置,因此第二次将其保存在脚本中对内存效率不高.那么…获取所有标头的后门是什么,而不像下面的变通方法那样愚蠢?例如,这对于作为debug / developer类的一部分很有用,该类在页面末尾将所有“ developer”数据呈现为html注释.当然,我省略了内容长度标头,但这还为时过早.

>似乎此函数忽略了所有没有冒号的标题…对吗?

要发布更多代码,可以使用简单的变通方法来实现标头函数(线性的不是对象,使用全局变量而不是静态类只是为了说明这一点).假设标头函数将省略不带冒号的标头(这可能不是很正确…):

// 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());

?>

解决方法:

// headers_list

SG(sapi_headers).headers

// http_response_code

SG(sapi_headers).http_response_code

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

SG(sapi_headers).mimetype = NULL;

> HTTP /

>内容类型

>内容长度

>位置

>万维网认证

专门检查HTTP /是因为这是在PHP 5.4之前显式设置状态代码的方式:此后,为了便于阅读,建议使用http_response_code.所使用的header()令人困惑,因为您在这个问题中询问的原因和一般原则是:http header BNF显然不包括状态行:

06002

PHP分别处理其他值,因为它们是单值标头和/或它们的值对于以后的计算效率至关重要.

TL; DR:headers_list()中不包含header()设置的HTTP /,因为从严格的RFC角度来看,HTTP /状态行不是标题.但是对于PHP< 5.4局限性在于header()是设置HTTP /状态的唯一方法,它可能从来就不是一个令人困惑的问题.

标签:list,header,status,php

来源: https://codeday.me/bug/20191120/2040386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值