【发布时间】:2011-05-15 18:44:43
【问题描述】:
尝试为 curl 处理程序创建 5 个 curl 子项并定义它们,但找不到最好的方法..我的代码到目前为止
$curls = array($ch1, $ch2, $ch3, $ch4, $ch5); // have a bad feelin about this
$cont = array($cont1, $cont2, $cont3, $cont4, $cont5); // bad
for($i = 0; $i < count($curls); $i++) { // bad
$curls[$i] = curl_init();
curl_setopt($curls[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curls[$i], CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curls[$i], CURLOPT_REFERER, $ref);
curl_setopt($curls[$i], CURLOPT_USERAGENT, $useragent);
curl_setopt($curls[$i], CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curls[$i], CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curls[$i], CURLOPT_URL, $url);
curl_setopt($curls[$i], CURLOPT_POST, true);
curl_setopt($curls[$i], CURLOPT_POSTFIELDS, $data);
$cont[$i] = curl_exec($curls[$i]); // bad
curl_setopt($curls[$i], CURLOPT_URL, $url);
curl_setopt($curls[$i], CURLOPT_POST, true);
curl_setopt($curls[$i], CURLOPT_POSTFIELDS, $data);
$cont[$i] = curl_exec($curls[$i]); // bad
}
以后:
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
curl_multi_add_handle($mh,$ch3);
curl_multi_add_handle($mh,$ch4);
curl_multi_add_handle($mh,$ch5);
这行得通吗,或者..这是最佳方式吗?好像有点颠簸
【问题讨论】:
-
为什么要在定义它们的循环中执行句柄?多句柄的意义不在于并行吗?
-
@Tim Yates:嗯,他们还没有做并行处理,他们一个一个地登录,当他们都登录时,他们开始做并行工作
-
您需要登录不同的帐户还是每个帐户?不能只在一次登录后共享 cookie 文件吗?
-
$Ryan Pendelton:与所有 5 个 curl 孩子相同的帐户,共享 cookie 文件?怎么样?