Ikar1988
Новичок
Проблема с curl_multi
Добрый день.
Пишу парсер на PHP. Идет анализ большого числа сайтов, поэтому было принято решение об эмуляции многопоточности с использованием CURL. Код примерно следующий:
В качестве $urls передается массив URL. При этом система отказывается обращаться "сама к себе". Допустим, сайт visa.snowarts.ru при массиве:
возвращает пустые значения на хостинге, а на локальной машине работает. В чем может быть проблема?
Добрый день.
Пишу парсер на PHP. Идет анализ большого числа сайтов, поэтому было принято решение об эмуляции многопоточности с использованием CURL. Код примерно следующий:
PHP:
function multiget($urls, &$result, $post, $post_2 = NULL)
{
$threads = $this->threads;
$useragent = $this->all_useragents[array_rand($this->all_useragents)];
$i = 0;
for($i=0;$i<count($urls);$i=$i+$threads)
{
$urls_pack[] = array_slice($urls, $i, $threads);
}
foreach($urls_pack as $pack)
{
$k = 0;
$mh = curl_multi_init(); unset($conn);
foreach ($pack as $i => $url)
{
$conn[$k]=curl_init(trim($url));
curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER, 1);
curl_setopt($conn[$k], CURLOPT_HEADER, 1);
curl_setopt($conn[$k],CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($conn[$k], CURLOPT_CONNECTTIMEOUT, $this->timeout);
curl_setopt($conn[$k],CURLOPT_USERAGENT, $useragent);
curl_setopt($conn[$k], CURLOPT_POST, 1);
curl_setopt($conn[$k], CURLOPT_POSTFIELDS, $post);
curl_multi_add_handle ($mh,$conn[$k]);
$k++;
if ($post_2) {
$conn[$k]=curl_init(trim($url));
curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER, 1);
curl_setopt($conn[$k], CURLOPT_HEADER, 1);
curl_setopt($conn[$k],CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($conn[$k], CURLOPT_CONNECTTIMEOUT, $this->timeout);
curl_setopt($conn[$k],CURLOPT_USERAGENT, $useragent);
curl_setopt($conn[$k], CURLOPT_POST, 1);
curl_setopt($conn[$k], CURLOPT_POSTFIELDS, $post_2);
curl_multi_add_handle ($mh,$conn[$k]);
$k++;
}
}
do { $n=curl_multi_exec($mh,$active); usleep(100); } while ($active);
for ($i = 0; $i < $k; $i++)
{
$result[]=curl_multi_getcontent($conn[$i]);
curl_close($conn[$i]);
}
curl_multi_close($mh);
}
PHP:
array('http://visa.snowarts.ru/get/s7', 'http://visa.snowarts.ru/get/uralairlines', 'http://visa.snowarts.ru/get/vimavia', 'http://visa.snowarts.ru/get/utair', 'http://visa.snowarts.ru/get/russia');