get_headers如何在后台运行

时间:2013-10-06 22:59:08

标签: php

我试着寻找这个,我相信我已经知道了答案,但这是因为我没错,所以我走了......

当调用get_headers时,我会检索整个文件,即使该函数只返回标题,还是会按预期检索标题而不检索其他内容?

我猜到了最后但是如果我错了,这将导致一些严重的问题.. 另外我注意到有一个全局设置我可以更改为发送HEAD请求而不是默认的GET请求,这就是为什么我要问我的自我真实情况。


修改

也许这个功能是更好的选择? stream_get_meta_data或者他们真的做同样的事情吗?

3 个答案:

答案 0 :(得分:1)

如果您熟悉C,还可以查看源代码。

该函数定义为here。我很快查看了这个,似乎它只是一个标题请求,见第715行:

STREAM_ONLY_GET_HEADERS

答案 1 :(得分:0)

不幸的是你是对的,只需阅读PHP手册:

  

get_headers()返回一个数组,其中包含服务器发送的标头以响应HTTP请求。

另请参阅示例。

好的,下次我应该更多地关注问题的表述。

是的,如果请求类型设置为GET(标准),您将获得整个内容。您可以将其更改为HEAD,但这不是您想要的。

答案 2 :(得分:0)

获取

  

请求指定资源的表示。请求使用   GET应该只检索数据,不应该有其他影响。 (这个   其他一些HTTP方法也是如此。)W3C已经发布   关于这种区分的指导原则,称“Web应用程序   设计应该通过上述原则告知,也可以通过   相关限制。“

<强> HEAD

  

要求响应与对应的响应相同   GET请求,但没有响应正文。这很有用   检索在响应标头中写入的元信息,而不是   必须传输整个内容。

Wikipedia/Hypertext_Transfer_Protocol

PHP-doc明确指出普通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');
?>