Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // страницы, содержимое которых надо получить
- $urls = array('ya.ru/keks.html','ya.ru');
- // инициализируем "контейнер" для отдельных соединений (мультикурл)
- $cmh = curl_multi_init();
- // массив заданий для мультикурла
- $tasks = array();
- // перебираем наши урлы
- foreach ($urls as $url) {
- // инициализируем отдельное соединение (поток)
- $ch = curl_init('http://'.$url);
- // если будет редирект - перейти по нему
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- // возвращать результат
- 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($cmh, $ch);
- }
- // количество активных потоков
- $active = null;
- // запускаем выполнение потоков
- do {
- $mrc = curl_multi_exec($cmh, $active);
- }
- while ($mrc == CURLM_CALL_MULTI_PERFORM);
- $result = array();
- // выполняем, пока есть активные потоки
- while ($active && ($mrc == CURLM_OK)) {
- // если какой-либо поток готов к действиям
- if (curl_multi_select($cmh) != -1) {
- // ждем, пока что-нибудь изменится
- do {
- $mrc = curl_multi_exec($cmh, $active);
- // получаем информацию о потоке
- $info = curl_multi_info_read($cmh);
- // если поток завершился
- if ($info['msg'] == CURLMSG_DONE) {
- $ch = $info['handle'];
- // ищем урл страницы по дескриптору потока в массиве заданий
- $url = array_search($ch, $tasks);
- // забираем содержимое
- $result[$url]['answer'] = curl_multi_getcontent($ch);
- $result[$url]['status'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- $result[$url]['content-type'] = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
- $result[$url]['error'] = curl_errno($ch);
- // удаляем поток из мультикурла
- curl_multi_remove_handle($cmh, $ch);
- // закрываем отдельное соединение (поток)
- curl_close($ch);
- }
- }
- while ($mrc == CURLM_CALL_MULTI_PERFORM);
- }
- }
- // закрываем мультикурл
- curl_multi_close($cmh);
- echo '<pre>';
- print_r($result);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement