我试着寻找这个,我相信我已经知道答案了,但很重要的是我没有错,所以我开始了..
调用时get_headers
,即使该函数仅返回标头,我是否会检索整个文件,还是会如预期的那样仅检索标头而不检索其他文件?
我猜是最后一个,但如果我错了,这会导致一些严重的问题。我还注意到有一个全局设置我可以更改为发送 HEAD 请求而不是默认的 GET 请求,这就是我为什么问我自己到底发生了什么。
编辑
也许这个功能是一个更好的选择?stream_get_meta_data还是他们实际上做同样的事情?
我试着寻找这个,我相信我已经知道答案了,但很重要的是我没有错,所以我开始了..
调用时get_headers
,即使该函数仅返回标头,我是否会检索整个文件,还是会如预期的那样仅检索标头而不检索其他文件?
我猜是最后一个,但如果我错了,这会导致一些严重的问题。我还注意到有一个全局设置我可以更改为发送 HEAD 请求而不是默认的 GET 请求,这就是我为什么问我自己到底发生了什么。
也许这个功能是一个更好的选择?stream_get_meta_data还是他们实际上做同样的事情?
不幸的是,您是对的,只需阅读 PHP 手册:
get_headers() 返回一个数组,其中包含服务器为响应 HTTP 请求而发送的标头。
另请查看示例。
好的,下次我应该多注意问题的制定。
是的,如果请求类型设置为 GET(标准),您将获得全部内容。您可以将其更改为 HEAD,但这不是您想要的。
得到
请求指定资源的表示。使用 GET 的请求应该只检索数据并且应该没有其他效果。(其他一些 HTTP 方法也是如此。) W3C 已经发布了关于这种区别的指导原则,称“Web 应用程序设计应遵循上述原则,但也应遵循相关限制。”
头
请求与对应于 GET 请求的响应相同的响应,但没有响应正文。这对于检索写入响应标头中的元信息很有用,而无需传输整个内容。
维基百科/Hypertext_Transfer_Protocol
PHP-docs 清楚地指出正常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');
?>