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

我尝试在 php 中使用函数 getallheaders() ,它基本上将请求的标头作为关联数组获取。奇怪的是,当我尝试从该数组中获取变量时,如果该数组中不存在该键,它将向用户发送响应。


这是示例代码


$headers = getallheaders();

$a = $headers["non_existing_key"];

echo headers_sent();

这将打印 1,这意味着标头已发送,或者换句话说,我无法再为用户打开会话,因为 session_start() 仅在标头尚未发送时才起作用。

我知道我可以用 isset() 检查密钥,但这只是出于好奇。


有人可以帮助我为什么会发生这种情况吗?


沧海一幻觉
浏览 92回答 2
2回答

呼啦一阵风

如果您已启用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;

慕哥6287543

打开输出缓冲该函数将打开输出缓冲。当输出缓冲处于活动状态时,脚本不会发送任何输出(标头除外),而是将输出存储在内部缓冲区中。
打开App,查看更多内容
随时随地看视频慕课网APP