CURL或file_get_contents更新供稿列表?

时间:2011-09-21 16:44:05

标签: php curl rss file-get-contents

我正在运行一个提要阅读器网站,那里会有很多RSS。我将尽可能经常同步这些Feed,因此我找到了这两种方法。

1方法:使用CURL

$weblog_name = 'MyBlog';
$weblog_url = 'http://feeds.feedburner.com/myblog';
$ping_url = 'http://ping.feedburner.com';

$request = <<<EOT
<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
 <param>
  <value>
   <string>$weblog_name</string>
  </value>
 </param>
 <param>
  <value>
   <string>$weblog_url</string>
  </value>
 </param>
</params>
</methodCall>
EOT;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ping_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, trim($request)); 
$result = curl_exec($ch);
curl_close($ch); 

第二种方法:file_get_contents

file_get_contents("http://feedburner.google.com/fb/a/pingSubmit?bloglink=http://feeds.feedburner.com/myblog");

我的问题是哪个是更好,更快的解决方案,一次ping至少50个Feed?

6 个答案:

答案 0 :(得分:12)

使用file_get_contents获取google.com(以秒为单位):

2.31319094
2.30374217
2.21512604
3.30553889
2.30124092

CURL:

0.68719101
0.64675593
0.64326
0.81983113
0.63956594

这是使用http://davidwalsh.name/php-timer-benchmark

中的基准类

答案 1 :(得分:3)

因为您将一次更新50个 ,所以我强烈建议使用CURL有两个原因:

  1. 您可以使用允许您发送的curl_multi()函数 一次全部50个请求,而file_get_contents()只会去 一个接一个。这些函数的文档有点稀疏, 所以我建议使用一个轻量级的库 - 它更容易 与...合作。我个人用 https://github.com/petewarden/ParallelCurl,但你会发现很多 周围。

  2. 当你正在ping服务时,你真的不需要知道     响应,我想(只要它是HTTP 200)。所以你可以 使用     CURL选项CURLOPT_NOBODY使其成为HEAD请求, 从而     作为回应,你也会得到标题。这应该 速度     更进一步。

  3. 否则,对于简单请求,file_get_contents可能会更快,但在这种情况下,您的情况并不简单。在没有真正需要获取整个文档的情况下触发50个请求不是标准请求。

答案 2 :(得分:2)

实际上我认为curl比file_get_contents更快。

谷歌搜索了一下我在SO中发现了一些基准:file_get_contents VS CURL, what has better performance?

答案 3 :(得分:2)

我建议考虑使用curl ......虽然初看起来可能是一些开发开销,但它比file_get_contents强大得多。特别是如果你想获取多个feed,curl多个请求可能值得一看:

http://php.net/manual/en/function.curl-multi-init.php

答案 4 :(得分:2)

如果您希望将来具有灵活性(例如身份验证,Cookie,代理等),请使用cURL。速度与file_get_contents()大致相同,从基准测试来看(有人说它更快)

如果您想要快速简便的解决方案,那么请务必使用file_get_contents()。但是,它不是为了请求外部URL而构建的。大多数人发誓cURL使用外部URL进行任何工作,甚至是简单的GET请求。

使用cURL的唯一额外工作是一些额外的代码行,将它包装在一个函数中,你就可以了。

答案 5 :(得分:1)

get_file_contents更快。它做了一个简单的http,没有任何额外的实例化