2011-10-15 71 views
0

我在找到一個可以打開特定編號的捲曲函數。一次打開網頁也不會有輸出或返回錯誤會更好。我需要同時訪問5-10 url ..我聽說abt捲曲多線程,但沒有適當的功能或類使用它..捲曲多線程

我找到一些通過搜索,但大多數似乎是循環的意思它不是一個接一個地使用連續連接!我希望能夠一次連接多個連接的東西不是一個一個的!

我做了一個:

function mutload($url){ 
if(!is_array($url)){ 
exit; 
} 

for($i=0;$i<count($url);$i++){ 
// create both cURL resources 
$ch[] = curl_init(); 
$ch[] = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch[$i], CURLOPT_URL, $url[$i]); 
curl_setopt($ch[$i], CURLOPT_HEADER, 0); 
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 0); 

} 
//create the multiple cURL handle 
$mh = curl_multi_init(); 

for($i=0;$i<count($url);$i++){ 
//add the two handles 
curl_multi_add_handle($mh,$ch[$i]); 
} 
$active = null; 
//execute the handles 
do { 
$mrc = curl_multi_exec($mh, $active); 
} while ($mrc == CURLM_CALL_MULTI_PERFORM); 

while ($active && $mrc == CURLM_OK) { 
if (curl_multi_select($mh) != -1) { 
    do { 
     $mrc = curl_multi_exec($mh, $active); 
    } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
} 
} 

//close the handles 
for($i=0;$i<count($url);$i++){ 
curl_multi_remove_handle($mh, $ch[$i]); 
} 
curl_multi_close($mh); 
} 

OK!但我很困惑,它會連接所有的URL一次或一個接一個!我的內容也是我的內容也是我只想連接或請求到網站不需要從那裏我的內容我用RETURNTRASFER,虛假但沒有工作..請高聲謝謝我!

回答

0

您在尋找curl_multi_*系列的功能。看看curl_multi_exec

設置CURLOPT_NOBODY阻止curl下載任何強制。

+0

爲u告訴我做了一個腳本,請看看! –

+0

@SoumoGorai用'CURLOPT_NOBODY'更新了答案。 'multi_'函數將並行發送請求。你能否澄清一下你剩下的問題是什麼?我在閱讀你的問題時遇到了麻煩,可能是因爲英語不是我的第一語言,而且你似乎有一個非常有創意的正字法。我是否正確地認爲'mre over'代表了另一種意義,而'abt'代表了大約? – phihag

+0

你的英語非常好!我沒有概率閱讀它,這些日常使用反正是一些常見的話!你能告訴我我的腳本可以並行發送請求嗎?謝謝 –

0

我沒有測試你的代碼,但curl_multi從一個循環中將項目添加到一個隊列並且並行處理它們。如果您嘗試加載100個網址,有時會出現問題,但對於少數網址應該沒問題。如果您有很長的DNS查詢或較慢的服務器,則所有結果都必須等待最慢的請求。

此代碼測試,應該工作,它有點類似於你:

http://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/

+0

我已經使用了這個腳本,你告訴「滾動捲曲」。但我不必下載像1000或更多,主要是20-30或很少50。也滾動捲曲需要大量的時間它需要3個工作468和我的功能羚牛140 3個工作! anywyas你能告訴我,我的函數可以並行連接嗎?謝謝 –

+0

curl_setopt($ ch [$ i],CURLOPT_RETURNTRANSFER,0);這必須是真實的以返回任何東西 – Len