Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Ни как не могу освоить мультикурл (закрыто), помогите разобраться в основах работы
Xes  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 844
Пользователь №: 27442
На форуме: 6 лет, 3 месяца, 3 дня
Карма: 7




Всем привет. Ни могу ни как разобраться с онсовами работы с мултикурлом. Вроди как читаю все понимаю, и вроди как все просто. Но начинаю делать неполучается вот например простейший код необходимо получить контент. Страница зависат видемо из за цикла запускающего мультикурл, хотя 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
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса