为了账号安全,请及时绑定邮箱和手机立即绑定

如果我尝试获取不存在的密钥,PHP getallheaders() 将自动发送响应

如果我尝试获取不存在的密钥,PHP getallheaders() 将自动发送响应

PHP
沧海一幻觉 2023-08-11 16:34:35
我尝试在 php 中使用函数 getallheaders() ,它基本上将请求的标头作为关联数组获取。奇怪的是,当我尝试从该数组中获取变量时,如果该数组中不存在该键,它将向用户发送响应。这是示例代码$headers = getallheaders();$a = $headers["non_existing_key"];echo headers_sent();这将打印 1,这意味着标头已发送,或者换句话说,我无法再为用户打开会话,因为 session_start() 仅在标头尚未发送时才起作用。我知道我可以用 isset() 检查密钥,但这只是出于好奇。有人可以帮助我为什么会发生这种情况吗?
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

如果您已启用error_reporting并且display_errors您的代码将触发:


注意:未定义索引:non_existing_key


为了显示错误,PHP 需要将输出发送到浏览器,因为不能混合 HTTP 标头和输出。


您可以使用常用技术验证密钥是否存在(选择您最喜欢的技术):


$a = isset($headers["non_existing_key"]) ? $headers["non_existing_key"] : null;

$a = array_key_exists("non_existing_key", $headers) ? $headers["non_existing_key"] : null;

$a = $headers["non_existing_key"] ?? null;


查看完整回答
反对 回复 2023-08-11
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

打开输出缓冲

该函数将打开输出缓冲。当输出缓冲处于活动状态时,脚本不会发送任何输出(标头除外),而是将输出存储在内部缓冲区中。

查看完整回答
反对 回复 2023-08-11
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信