2011-09-21 33 views
5

我正在運行一個Feed閱讀器網站,那裏會有很多RSS。我將不得不盡可能經常同步這些提要,所以我找到了這兩種方法。CURL或file_get_contents更新供稿列表?

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提要一次?

回答

1

get_file_contents更快。它做了一個簡單的http沒有任何額外instantiations

+0

我不熟悉的捲曲,它獲得的內容?我的意思是它是如何工作的? 另外,50個get_file_contents會一次很慢嗎? – EnexoOnoma

+1

cURL也會得到http請求的頭文件。 您可以在cURL中添加自己的請求標題,發佈變量和代理服務器。但是,對於簡單的獲取請求,cURL是不必要的。 我發現cURL需要在我的wamp服務器上花費10毫秒apache2.2.17 php5.3.5 for http://www.google.com –

+0

@mtopia它並沒有真正改變,因爲get_file_contents是同步的,即下一行被執行只有在這條線完全執行之後 –

2

:特別是如果你想獲取多張進紙,捲曲多請求可能是值得考慮的。速度與基準測試中的file_get_contents()大致相同(某些人認爲速度更快)

如果您想要一個快速簡便的解決方案,那麼請儘量使用file_get_contents()。但是,它不是爲了請求外部URL的目的而構建的。大多數人都以cURL爲藉口使用外部URL,即使是簡單的GET請求來發誓。

使用cURL的唯一額外工作是一些額外的代碼行,將它包裝在一個函數中,你很好。

3

因爲你將更新50提要一次,我會強烈建議使用curl的原因有兩個:

  1. 你可以使用curl_multi()函數,將允許您發送 所有50個請求立刻,而file_get_contents()將只能去 一個接一個。這些功能的文檔有點稀疏,所以我建議使用一個輕量級的庫 - 這與 一起工作要容易得多。我個人使用 https://github.com/petewarden/ParallelCurl,但你會發現很多 左右。

  2. 由於您正在ping服務,您並不需要知道 的響應,我猜(只要它是HTTP 200)。因此,您可以使用 使用 CURL選項CURLOPT_NOBODY使其成爲HEAD請求,因此 因此也會只有標題。這應該是 速度 了更多的過程。

否則,對於簡單的請求,file_get_contents可能會更快,但在這種情況下,您的情況並不簡單。無需真正需要將50個請求發回給整個文檔,這不是一個標準請求。

相關問題