[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ни как не могу освоить мультикурл (закрыто)
Xes
Всем привет. Ни могу ни как разобраться с онсовами работы с мултикурлом. Вроди как читаю все понимаю, и вроди как все просто. Но начинаю делать неполучается вот например простейший код необходимо получить контент. Страница зависат видемо из за цикла запускающего мультикурл, хотя cтараюсь делать все по примерам из php.net
Свернутый текст
<?php
#Заголовки браузера
$header = array();
$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$header[] = 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
$header[] = 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7';
$header[] = 'Connection: keep-alive';
$header[] = 'Cache-Control: max-age=0';
$ch = array();
$resch = array();
$query = "SELECT `cityen`, `urlcityen` FROM `ac_weather`";
$sql = mysql_query($query) or die('Error!');
if(mysql_num_rows($sql) > 0){
$mh = curl_multi_init();
while($sqlrow = mysql_fetch_array($sql, MYSQL_ASSOC)){
extract($sqlrow, EXTR_OVERWRITE);
$ch[$cityen] = curl_init();
$options = array(
CURLOPT_URL => 'http://weather.yandex.ru/'.$urlcityen.'/details/',
CURLOPT_HTTPHEADER => $header,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_NOBODY => false,
CURLOPT_HEADER => false,
);

curl_setopt_array($ch[$cityen], $options);
curl_multi_add_handle($mh, $ch[$cityen]);
echo $urlcityen.'<br />';
}
echo count($ch);
$running = null;
do{
curl_multi_exec($mh, $running);
echo $running.'<br />';
}while($running > 0);
curl_multi_remove_handle($mh, $ch['abakan']);
curl_multi_remove_handle($mh, 'nizhny-novgorod');
curl_multi_close($mh);
// foreach($ch as $key => $val){
// $resch[$key] = curl_multi_getcontent($val);
// echo $resch[$key];
// }

}else{
echo 'Таблица "weather" пуста.';
}

?>


Данный вопрос отменяется вроди вкурил че есть че, на данном этапе.



Спустя 2 дня, 3 часа, 19 минут, 39 секунд (12.01.2012 - 21:16) Игорь_Vasinsky написал(а):
вот это удобней http://felix90.ru/2011/05/%D0%BA%D0%BB%D0%...1%81-multicurl/

скрипя зубами отдаю...

Спустя 1 час, 16 минут, 48 секунд (12.01.2012 - 22:32) Xes написал(а):
Спасибо всеже за код. но решение мне не особо надо, я сдела че хотел сам. Я не понимаю как это работает. Вот в том коротком варианте запуска что у тебя и у меня боле менее прозрачно там идет полное завершение запросов. Т.е пришли ответы от серверов и дальше мы получаем контент. Хотя какие ответы пришли мне тоже не очень понятно пришли уже данные html запрошенных страниц и мы уже их локально функцией curl_multi_getcontent получаем (аналогично скажем $sql = mysql_query($query) - делает запрос, а mysql_fetch_array($sql) - работет уже с ее результатом работы.), или эта функция опять чето в интернете капает.

Такой простенький код у меня есть, и он работает. Я хотел бы чтобы мне расказали как вышеприведенный код работает на словах.
Свернутый текст
function CurlGetContent($arrurl){
$header = array();
$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$header[] = 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
$header[] = 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7';
$header[] = 'Connection: keep-alive';
$header[] = 'Cache-Control: max-age=0';
$ch = array();
$htmlch = array();
$mh = curl_multi_init();
foreach($arrurl as $key=>$url){
$ch[$key] = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $header,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_NOBODY => false,
CURLOPT_HEADER => false
);
curl_setopt_array($ch[$key], $options);
curl_multi_add_handle($mh, $ch[$key]);
}
do{
$mrc = curl_multi_exec($mh, $active);
}while($active);
foreach($ch as $key=>$val){
$htmlch[$key] = curl_multi_getcontent($val);
curl_multi_remove_handle($mh, $val);
curl_close($val);
}
curl_multi_close($mh);
return $htmlch;
}

Спустя 4 минуты, 45 секунд (12.01.2012 - 22:37) Игорь_Vasinsky написал(а):
сформировали необходимые заголовки чтоб как следует замоскироваться
выташили из бд линки для парсинга
и в цикле начали инициализировать отдельные сеанс для каждого лина, по путно указывая настройки для курла
смотрим есть ли ещё в списке урлы
наполнили массив раннинг контентом полученных с массива с адресами.

Спустя 1 минута, 34 секунды (12.01.2012 - 22:39) Игорь_Vasinsky написал(а):
если не ошибаюсь в конце заполнил ассоциат. массив урл=>контент. () закомментирован

Спустя 3 минуты, 46 секунд (12.01.2012 - 22:42) Xes написал(а):
А да сори не посмотрел .... че за пост уже запутался. Здесь такая же ерунад как и впоследующем моем посте. Здесь все боле меннее ясно. Просто второй мой пост это тот же код доведенный до ума. Я тут гдето постил пример c multi_selectom вот там у меня были вопросы.
Вот о каком примере я говорил.... Хотел говорить....

http://phpforum.ru/index.php?showtopic=55929
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.