如何减少file_get_contents的执行时间

时间:2011-03-16 16:55:58

标签: php url

我正在使用file_get_contents从链接中获取标题,但执行大约需要20到30秒。有一种简单快捷的获取方式吗?

更新:我尝试了这个代码,它带来了所有内容,包括html

$page = fread(fopen($url, "r"), 1000);   // first 2KB
$titleStart = strpos($page,'<title>')+7;
$titleLength = strpos($page,'</title>')-$titleStart;
$meta['title'] = substr($page,$titleStart,$titleLength);

4 个答案:

答案 0 :(得分:3)

你可以尝试curl(http://php.net/manual/en/book.curl.php),或者如果它没有定期更改,请缓存答案。

您的问题很可能是由于网络延迟造成的,其中很大一部分是由您从中提取数据的网站控制的。地理位置靠近主机的服务器可以提供帮助。

答案 1 :(得分:3)

对于检索远程页面,时间主要取决于连接速度,延迟和远程服务器。关于这些事情,你无能为力,使用另一种HTTP检索方法只会有所帮助。

但是,如果远程页面非常大,那么仅部分获取它是有意义的。不要使用file_get_contents来下载整个页面,请尝试:

$page = fread(fopen($url, "r"), 2048);   // first 2KB

对于提取使用此而不是您的substr方法:

preg_match('#<title>(.*?)</title>#', $page, $match);
$meta["title"] = $match[1];

答案 2 :(得分:1)

你最好选择一个可能经常被要求缓存它的文件。

在您的服务器上保留一个cache文件夹,只要您请求的文件不经常更改,您只需使用filemtime()检查文件缓存版本的上次修改时间,如果时间超过24小时,您可以请求远程文件

答案 3 :(得分:0)

curl函数是解决方案,因为curl中有CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT,但file_get_contents,fopen等中只有stream_set_timeout(连接超时)。