Свернутый текст
<?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 написал(а):
Спустя 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
Вот о каком примере я говорил.... Хотел говорить....
http://phpforum.ru/index.php?showtopic=55929