我试着搜索这个,我相信我知道答案,但我没有错,所以我来了..
调用 get_headers
时,即使函数只返回标头,我也会检索整个文件,还是会像预期的那样只检索标头而没有其他内容?
我猜的是最后一个,但如果我错了,这会导致一些严重的问题。我还注意到,我可以更改一个全局设置来发送 HEAD 请求而不是默认的 GET 请求,女巫就是我问自己到底发生了什么。
编辑
也许这个功能是更好的选择? stream_get_meta_data还是他们实际上做同样的事情?
如果你熟悉C,你也可以看看源代码。
此处定义了该函数。我快速查看了一下,似乎这是一个仅标头的请求,请参阅第 715 行:
STREAM_ONLY_GET_HEADERS
GET
请求指定资源的表示形式。请求使用 GET 应该只检索数据,不应该有其他影响。(这 其他一些 HTTP 方法也是如此。W3C 已发布 关于这种区别的指导原则,说:"Web应用程序 设计应以上述原则为依据,但也应以 相关限制。
头
请求与对应于 a 的响应相同的响应 GET 请求,但没有响应正文。这对于 检索写入响应标头中的元信息,无需 必须传输整个内容。
维基百科/Hypertext_Transfer_Protocol
PHP 文档明确指出普通get_headers()
使用 GET 请求,但您可以强制它使用 HEAD 代替,如下所示:
<?php
// By default get_headers uses a GET request to fetch the headers. If you
// want to send a HEAD request instead, you can do so using a stream context:
stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD'
)
)
);
$headers = get_headers('http://example.com');
?>
不幸的是,你是对的,只需阅读PHP手册:
get_headers() 返回一个数组,其中包含服务器为响应 HTTP 请求而发送的标头。
另请查看示例。
好吧,下次我应该花更多的精力在问题表述上。
是的,如果请求类型设置为 GET(标准),您将获得全部内容。您可以将其更改为 HEAD,但这不是您想要的。