PHP-PHP库函数里的get_headers()为什么有时候会获取不到?

发布于 2017-01-30 10:18:47 字数 112 浏览 1224 评论 2

利用 get_headers() 获取 Content-Length,因为数量大,所以得以观察到 有部分文件的大小获取不到,即断断续续,(不知道是不是网络情况的原因?)。请问大家这种情况如何解决或者避免比较好?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-10-19 22:45:14

函数默认使用的是GET请求,可能不稳定(服务器会把文件全部内容发来,虽然PHP在获得Header后就会中断连接,但也可能造成网络堵塞或其他问题)。可以改成用HEAD请求。

stream_context_set_default (
array(
'http' => array(
'method' => 'HEAD'
)
)
);
$headers = get_headers ( 'http://example.com' );

只有PHP5.3以上才能用stream_context_set_default函数。如果不是5.3,就用CURL或者fsockopen获取吧。

晚风撩人 2017-02-07 16:00:16

Fetches all the headers sent by the server in response to a HTTP request,可以看出来实际上get_header()函数的作用是将对应的HTTP请求的头部内容存到一个数组中,然后就可以通过访问这个数组获取相应的这一次HTTP请求的Response内容:

如果你感觉内容可能很大,导致获取失败,可以使用下面的方法,比如对你请求的内容进行两次异步的请求,(使用 CURL_MULTI_EXEC )这样的话,应该能够增加获取成功的概率,因为是异步的,几乎不会占用额外的时间,当然这个是个妥协的方法,按理说不应该GET一个内容失败的,除非真是严重的网络问题,其实如果网络有问题,基本上什么函数可能都不好使:

ch = curl_init('http_url');
curl_setopt($ch, CURLOPT_HEADER, 1);
$c = curl_exec($ch);
$info = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print_r($info);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文