PHP-PHP库函数里的get_headers()为什么有时候会获取不到?
利用 get_headers() 获取 Content-Length,因为数量大,所以得以观察到 有部分文件的大小获取不到,即断断续续,(不知道是不是网络情况的原因?)。请问大家这种情况如何解决或者避免比较好?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
函数默认使用的是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获取吧。
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);