доброе время суток взял какойто пример с аналов инета PHP: <?php $urls = array( 'http://graph.facebook.com/http://tech.vg.no', 'http://graph.facebook.com/http://www.vg.no', ); $multi = curl_multi_init(); $channels = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($multi, $ch); $channels[$url] = $ch; } $active = null; do { $mrc = curl_multi_exec($multi, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($multi) == -1) { continue; } do { $mrc = curl_multi_exec($multi, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } foreach ($channels as $channel) { echo curl_multi_getcontent($channel); curl_multi_remove_handle($multi, $channel); } curl_multi_close($multi); чтобы понять что к чему и после чего - тупо открыл ссылки ( проверил работоспособность - отдает json ) все ок. запустил скрипт и на этапе if (curl_multi_select($multi) == -1 застрял - он мне всегда только -1 и дает .. попробовал еше 1 скрипт - опять на -1 стопорится - даже сервак перезапускать приходится непойму чего не так ..
скопипастил 14797 apache2 20 0 324612 11652 2256 R 49,91 0,566 1:03.06 httpd2 14800 apache2 20 0 324612 11652 2256 R 49,58 0,566 1:36.83 httpd2 красным - загрузка проца -) и нулевой результат --- Добавлено --- опять там же - мне всегда приходит -1 в if(curl_multi_select($multi)==-1){ --- Добавлено --- если не лень - а у тебя эта штука работает ? с обычным курлом у меня проблем нету .. а вот как до мульти дошел ... черти что началось --- Добавлено --- о шас попробую на своем компе запустить ( без апача на серваке пыха) --- Добавлено --- фигушки - загрузка ядра 100% .. и толку ноль чтото тут не так .. --- Добавлено --- а вот так работает ( по первому примеру) http://ru.stackoverflow.com/questions/367010/multi-curl-пропускает-5-10-ответов PHP: <?php $urls = array( 'http://graph.facebook.com/http://tech.vg.no', 'http://graph.facebook.com/http://www.vg.no', ); $mh = curl_multi_init(); $connectionArray = array(); foreach($urls as $key => $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $ch); $connectionArray[$key] = $ch; } $running = null; do { curl_multi_exec($mh, $running); }while($running > 0); foreach($connectionArray as $key => $ch) { //здесь получаю контент страницы echo curl_multi_getcontent($ch)."<br>"; curl_multi_remove_handle($mh, $ch); } curl_multi_close($mh);
я юзал в свое время мультикурл...в итоге бах..и не работает....ковырялся дня три вместе с хостером у которого сервер брали..в итоге бан был на уровне другого дата центра с которого я пытался мультикурлом тянуть данные так что поаккуратнее ) Мне кажется что на данный момент, когда 90% под защитой от ддоса это утопия его использовать
PHP: <?php $urls = array( 'http://graph.facebook.com/http://tech.vg.no', 'http://graph.facebook.com/http://www.vg.no', ); $mh = curl_multi_init(); $connectionArray = array(); //создается пул запросов foreach($urls as $key => $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $ch); $connectionArray[$key] = $ch; } // выполение этого пула - до последней загрузки $running = null; do { curl_multi_exec($mh, $running); }while($running > 0); //загрузились ! получаем ВСЕ данные foreach($connectionArray as $key => $ch) { //здесь получаю контент страницы echo curl_multi_getcontent($ch)."<br>"; curl_multi_remove_handle($mh, $ch); } curl_multi_close($mh); ребят я хочу сделать пул из 20 ( но общее количество запросов будет около 1000) я никак не соображу как сделать после загрузки 1 задачи из пула - запуск на это место новой задачи во время выполнения пула нет возможности возвратить $ch - идентификатор конкретной задачи чтобы выташить ее из завершенной может кто что увидит - как это можно сделать ?
наткнулся вот на такую функцию https://php.ru/manual/function.curl-multi-info-read.html но не совсем понимаю ее принципа работы