为什么file_get_contents()比使用fsock_open()更快?

时间:2010-12-22 01:41:13

标签: php http-headers

在PHP中,有时我想向远程站点发送HTTP请求只是为了查看响应头,所以我手动声明它并使用fsock_open()函数。但是,这比使用远程URL(加载整个页面内容)调用file_get_contents()要慢得多。为什么是这样?是否有一种很好的替代方法来获取响应头(例如,检查页面是否返回404错误),其工作速度与file_get_contents()一样快?

1 个答案:

答案 0 :(得分:0)

你刚试过使用curl吗?如果需要,您可以取回标题和内容。

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/
2008120122 Firefox/3.0.5";
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

$output = curl_exec($ch);
$info = curl_getinfo($ch);

这将追逐重定向,这并不总是需要。

查看http://php.net/manual/en/function.curl-getinfo.php,了解您在$info中收到的内容。

您可以尝试仅执行HEAD请求而不是GET(CURLOPT_NOBODY选项),但我遇到了一些因某些原因拒绝HEAD的服务器的问题。