我正在运行一个提要阅读器网站,那里会有很多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?
答案 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
中的基准类
答案 1 :(得分:3)
因为您将一次更新50个 ,所以我强烈建议使用CURL有两个原因:
您可以使用允许您发送的curl_multi()函数 一次全部50个请求,而file_get_contents()只会去 一个接一个。这些函数的文档有点稀疏, 所以我建议使用一个轻量级的库 - 它更容易 与...合作。我个人用 https://github.com/petewarden/ParallelCurl,但你会发现很多 周围。
当你正在ping服务时,你真的不需要知道 响应,我想(只要它是HTTP 200)。所以你可以 使用 CURL选项CURLOPT_NOBODY使其成为HEAD请求, 从而 作为回应,你也会得到标题。这应该 速度 更进一步。
否则,对于简单请求,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多个请求可能值得一看:
答案 4 :(得分:2)
如果您希望将来具有灵活性(例如身份验证,Cookie,代理等),请使用cURL。速度与file_get_contents()大致相同,从基准测试来看(有人说它更快)
如果您想要快速简便的解决方案,那么请务必使用file_get_contents()。但是,它不是为了请求外部URL而构建的。大多数人发誓cURL使用外部URL进行任何工作,甚至是简单的GET请求。
使用cURL的唯一额外工作是一些额外的代码行,将它包装在一个函数中,你就可以了。
答案 5 :(得分:1)
get_file_contents更快。它做了一个简单的http,没有任何额外的实例化