2010-12-31 7 views
5

तो, मूल रूप से मुझे लगभग 100-200 वेबपृष्ठों की सामग्री प्राप्त करने की आवश्यकता है। मैं curl_multi_ * का उपयोग करना चाहता हूं ताकि मैं इसे एक साथ में पकड़ सकूं, लेकिन मुझे यकीन नहीं है कि यह भी संभव है।एक कर्ल बहु निष्पादन से एकाधिक कर्ल हैंडल की सामग्री को पकड़ना?

मुझे कर्ल के साथ पता है, आप केवल रिटर्न ट्रांसफर विकल्प को सही पर सेट करेंगे और निष्पादन आउटपुट करेंगे, लेकिन मैं curl_multi_ * के साथ ऐसा कैसे करूं?

यदि असंभव है, तो ऐसा करने का कोई और तरीका है?

उत्तर

-1

कर्ल बहु इंटरफ़ेस के साथ ऐसा करना एक आसान काम है।

curl_multi इंटरफ़ेस समूहबद्ध कार्य प्रदान करता है।

आप आसान इंटरफ़ेस के साथ एक सामान्य कर्ल ऑपरेशन शुरू करते हैं, बहु हैंडल में पंजीकरण करते हैं, एक साथ कई नौकरी करते हैं, बस इतना ही।

यदि आप PHP में काम करते हैं, तो This पृष्ठ पर देखें ('कर्ल एकाधिक' के साथ googled)।

+0

वह वास्तव में मदद नहीं करता है। – Rob

4

मैं वही काम करने की कोशिश करते समय इस पर ठोकर खाई। मैंने सोचा कि मैं किसी भी व्यक्ति की मदद करने के लिए अपना समाधान जोड़ूंगा जिसकी भविष्य में एक ही समस्या है। सबसे पहले, मैं मान लेंगे आप इस तरह के रूप में अपने कर्ल संचालकों की एक सरणी है:

$mh = curl_multi_init(); 
$requests = array(); 
foreach ($someArray as $identifier => $url) { 
    $requests[$identifier] = curl_init($url); 
    curl_setopt($requests[$identifier], CURLOPT_RETURNTRANSFER, true); 
    //any other options you need to set go here 
    curl_multi_add_handle($mh, $requests[$identifier]); 
} 

मैं भी मान लें कि आपके अनुरोध भाग गया:

do { 
    $status = curl_multi_exec($mh, $running); 
} while ($status === CURLM_CALL_MULTI_PERFORM || $running); 

अंत में, हम आपके सवाल का जवाब करने के लिए मिल:

$returned = array(); 
foreach ($requests as $identifier => $request) { 
    $returned[$identifier] = curl_multi_getcontent($request); 
    curl_multi_remove_handle($mh, $request); //assuming we're being responsible about our resource management 
    curl_close($request); //being responsible again. THIS MUST GO AFTER curl_multi_getcontent(); 
} 

$returned में अब आपके सभी डेटा शामिल हैं।