Добрый день. Когда паршу 50 ссылок из них нормально считывает 9. Остальные получают ошибку 503. Каким образом можно уменьшить скорость обработки ссылок. Или может быть проблема в чем то другом. Или как выставить количество потоков. Curl вообще не понимаю пока мб поможете переписать скрипт. В файле pages.txt ссылки такого вида: http://shkolazhizni.ru/archive/0/n-51320/Код прилагается: | Код | <?php ini_set('memory_limit', '20000M'); set_time_limit(0); error_reporting(E_ALL); $dir = $_SERVER['DOCUMENT_ROOT']."/ejiqpep/partemp/papka_result/"; $ar = file("pages.txt");
foreach ($ar as $st) { $urls[] = trim($st); } $mh = curl_multi_init(); // массив заданий для мультикурла $tasks = array(); foreach ($urls as $url) { // инициализируем отдельное соединение (поток) $ch = curl_init($url); // возвращать результат curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // не возвращать http-заголовок curl_setopt($ch, CURLOPT_HEADER, 0); // таймаут соединения curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // таймаут ожидания curl_setopt($ch, CURLOPT_TIMEOUT, 10); // добавляем дескриптор потока в массив заданий $tasks[$url] = $ch; // добавляем дескриптор потока в мультикурл curl_multi_add_handle($mh, $ch); }
// количество активных потоков $active = null; while( ($mrc = curl_multi_exec($mh, $running))==CURLM_CALL_MULTI_PERFORM ); //просто запускаем все соединения while($running && ($mrc == CURLM_OK)){ if($running and curl_multi_select($mh)!=-1 ){ do{ $mrc = curl_multi_exec($mh, $running); $info=curl_multi_info_read($mh); // если поток завершился if( $info and $info['msg'] == CURLMSG_DONE ){ $ch = $info['handle']; $url = array_search($ch, $tasks); $status=curl_getinfo($ch,CURLINFO_HTTP_CODE); $tasks[$url]=curl_multi_getcontent($info['handle']); curl_multi_remove_handle($mh, $ch); curl_close($ch); } }while ($mrc == CURLM_CALL_MULTI_PERFORM); } usleep(10000); } // закрываем мультикурл curl_multi_close($mh); $i = 1; // print_r($tasks); foreach($tasks as $key => $task){ $directory = $dir.$i.".html"; $f = fopen($directory,"w+"); if (fwrite($f,$task)) echo $key."<br>"; fclose($f); $i++; } ?>
|
|