卷曲多线程

时间:2011-10-15 09:00:26

标签: php mysql

我发现了一个可以打开特别号码的卷曲功能。一次打开的网页也没有输出或者返回数据会更好。我需要同时访问5-10个网址..我听说过卷曲多线程但没有适当的功能或类来使用它..

我通过搜索找到一些,但大多数似乎是循环意味着我不是一个接一个地使用连续连接!我想要的东西可以一次连接多个连接!

我做了一个:

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);
}
好的!但我很困惑,它会一次连接所有网址还是一个接一个! mre over i geeting the content我也只想连接或请求到网站不需要你的内容我使用RETURNTRASFER,假但没有工作..请发牢骚我谢谢!

2 个答案:

答案 0 :(得分:0)

您正在寻找curl_multi_*系列功能。看看curl_multi_exec

设置CURLOPT_NOBODY以防止curl下载任何强力。

答案 1 :(得分:0)

我没有测试你的代码,但是curl_multi从循环中将项添加到队列中并且并行处理它们。如果您尝试加载100个URL,有时可能会出现问题,但对于少数网址应该没问题。如果您有长DNS查询或慢速服务器,您的所有结果都必须等待最慢的请求。

此代码已经过测试,应该可以使用,它与您的代码有些相似:

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