Всем привет.. нужно пропарсить 1млн страниц... решил парсить с помошью курл по 100 потоков задаю в массив сразу все 1млн юрлов и лезет ошибка погуглив по ошибке ничего не нашел... понял что если задавать курлу не 1млн юрлов а к примеру 10к, то все работает прекрасно. возможно это ограничение на количество элементов в массиве? как предложите обойти такой косяк? юрлы добавляются в массив банально PHP: for($i=3000000;$i<=4000000;$i++){ $urls[$i]='http://site.ru/'.$i; } строки с 16 по 31 PHP: foreach ($urls as $url) { $ch = curl_init($url); //echo $url.'<br>'; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_REFERER, 'http://site.ru/'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); curl_setopt($ch, CURLOPT_COOKIEFILE, './cookie'); curl_setopt($ch, CURLOPT_COOKIEJAR, './cookie'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 1); $tasks[$url] = $ch; curl_multi_add_handle($cmh, $ch); }
Вот этот код (твой), который парсит мультикурлом, заверни в функцию. Которая будет принимать как один из аргументов - массив ссылок ($urls), а возвращать массив результатов (я незнаю, что тебе нужно, если целые страницы, то массив целых страниц, если только какой-то конкретно другой контент, то его). Назовем эту функцию, например, funkciya_parsinga(). Теперь вызывай ее вот так: PHP: function funkciya_parsinga($urls) { ... return $results; } $i = 0; $potokov_za_raz = 10000; $rezultaty = array(); for ($i = 0; $i < ceil(count($urls) / $potokov_za_raz); $i++) { $rezultaty = array_merge($rezultaty, funkciya_parsinga(array_slice($urls, $i*$potokov_za_raz, $potokov_za_raz))); }