Ребята привет, помогите пожалуйста разобраться с proxy в curl. Проблема заключается в том, что когда обрабатываешь больше 100 страниц с использованием прокси, то curl либо не обрабатывает часть из них, либо не обрабатывает все, выдавая разные ошибки. Но если прокси не устанавливать, то он спокойно обрабатывает 1000 страниц. Скажите, что я делаю не так, не делить же теперь все страницы на запросы по 100 штук?
function multi_curl($str, $uri){
$multi = curl_multi_init();
$channels = array();
$i = 0;
$proxys = file("proxy.txt"); shuffle($proxys);
foreach ($str as $key => $value){
if($proxys){
$proxy = explode(":", trim($proxys[$i]));
$url = preg_replace('/@/', $key, $uri);
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
if($proxy[2]){
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy[2].':'.$proxy[3]);
}
curl_multi_add_handle($multi, $ch);
$channels[$key] = $ch;
if($i == count($proxys)){
$i = 0;
} else {
$i++;
}
} else {
$url = preg_replace('/@/', $key, $uri);
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_multi_add_handle($multi, $ch);
$channels[$key] = $ch;
}
}
$active = null;
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
foreach ($channels as $key => $channel) {
$array = json_decode(curl_multi_getcontent($channel), true);
if(is_array($array))
{
$result[$key] = $array;
}
curl_multi_remove_handle($multi, $channel);echo curl_error($ch);
}
curl_multi_close($multi);
return $result;
}