Ноя 11
2008Вкусное. PhpDudeMassRequest class. Версия 0.1 beta.
Рубрики: (php, phpdude.ru, Полезные штуки, Утилиты) Автор: phpdude 11-11-2008
Теги : curl, curl_exec, curl_init, curl_multi_init, php, PhpDudeMassRequest, ахуенно, бесплатно, мне нравится, ПИЗДАТО, полезные штуки, я люблю
привет все, чувствую флейм тут всех заебал уже.
попробуем выложить что нить полезное.
я хз знаете ли вы про эти возможности curlБ если знаете – молодцы, если нет, увы я не открыл для вас чтото новое.
короче идея в том, что когда надо качать много данных с других серверов, можно использовать многопоточные возможности курла.
навеяно темой http://forum.searchengines.ru/showthread.php?t=284959
тут автор как раз говорит о том, что он хуеет от скорости загрузки рсс фидов, ибо у него это порядка 15 чтоли секунд. всякие мудаки предлагают ему писать на си и говне перле. эти люди просто знают про пхп на уровне file_get_contents + substr. и часто любят вопить, что пхп – ни хуя не язык. короче оффтоп в сторону. речь пойдет о curl_multi_init функции. может вы ее и знаете, но не пользовалась, может даже пользовались
)) суть в том, что достаточно хуево пользоваться этой функцией в виде
<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init(); // set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0); //create the multiple cURL handle
$mh = curl_multi_init(); //add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2); $running=null;
//execute the handles
do {
curl_multi_exec($mh,$running);
} while ($running > 0); //close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh); ?>
$mr = new MassRequest();
foreach($part as $v)
{
$mr->addUrl($v['link']);
}
$mr->fetch();foreach($part as $v)
{
$lastparsedlink = «»;
$feed->parse($mr->getContent($v['link']));
Всея ПЫХА
adw0rd
Мавр
ГО
Irinax
Спасибо!
Опробую разные варианты и насчет файлов конечно проверю (из темы на серче) на предмет скорости работы…
*глядя на время* Уже почти 6 часов подряд штудирую мукулатуру по Perl, – даже если не буду использовать в этом проекте, – любая информация не бывает лишней
охуеть, дайте две!
зацепило? ))))
хз, не предпочитаю перл, видимо это личное. люблю c# или php.
надо бы «}» поставить в конце foreach, хотя пох
Где взять толковую инфу про curl_multi?
php.net и сurl.haxx.se не предлагать там фигня.
2 yesrobot
можешь почитать про мой класс. думаю что поможет
описалово ближе к главной странице
2 Artyr
видимо херово скопипастил)
что за данные возвращяет ф-я curl_multi_info_read() ?
Допустим вот такие записи получаю:
…..
Array
(
[msg] => 1
[result] => 0
[handle] => Resource id #34
)
Array
(
[msg] => 1
[result] => 6
[handle] => Resource id #31
)
…..
ну handle понятно что, а вот что такое msg, result?
честно говоря почитал сейчас топ10 страниц в гугле по этой функции. функция появилась недавно, еще никто про нее толком не знает)
возвращает по большому счету херь, которая я уверен не пригодится. ты ее для чего использовать то собрался?
Ну просто интересно, люблю докапываться может пригодица.
Кстати я так понял параметр [result] это номер ошибки, список всех возможных (83 штуки!) здесь http://curl.haxx.se/libcurl/c/libcurl-errors.html
А вобще идея такая была прежде чем запускать curl_multi_getcontent(), проверяем а если вобще контент), тоесть существует ли урл, или может 404 и ещё какая нибуть лажа. Так вот если всё ок, тоесть [result] => 0, парсим, если ошибка непарсим.
Думаю ф-я curl_multi_info_read() и была создана для этого.
>>> А вобще идея такая была прежде чем запускать curl_multi_getcontent(), проверяем а если вобще контент), тоесть существует ли урл, или может 404 и ещё какая нибуть лажа. Так вот если всё ок, тоесть [result] => 0, парсим, если ошибка непарсим.
Думаю ф-я curl_multi_info_read() и была создана для этого.
я почти уверен что для этого была создана функция
http://ru.php.net/manual/en/function.curl-multi-exec.php
, int &$still_running
хотя может я непонял вопрос/идею
Привет, в чём ошибка может быть, подскажи.
Call to a member function parse() on a non-object in Z:\home\data\www\feed\index.php on line 48
Ругается на эту строчку – $feed->parse($mr->getContent($v));
в $v указан урл
у тебя $feed = не объект, возможно вообще не определено. пишет же ошибку то))
[...] Вчера писал скрипт, который должен был загрузить данные с трёх урлов и далее проводилась работа с полученными данными. Так вот задержка перед началом обработки была в районе 15 секунд, что очень много, да и урла всего 3, а если это число увеличить? Вообщем начал я искать решение этой проблемы. Нашёл решение в мультикурле, но не том, который предлагается здесь. На php.net не очень удобное решение, так как данные получаемые в результате тяжело разобрать. Решение проблемы в этом классе. Данный класс был найден на этом сайте. [...]
Хороший класс, только есть неприятный подвох:
за свой век насмотрелся я на содержимое хидеров среднестатистических сайтов – чего там только не встретишь (от простого отсутствия meta charset, вплоть до )
без этого класс кодировку не определит, т.е. контент не получишь.
Пока в голову только приходит определить кодировку по ответу сервера, т.е. сунуть get_headers в function getContent, но тогда прелестей курла лишишься. Что думаешь про это?
Да и сайтов с windows-1251 всеж больше нежели utf (говорю про те же среднестатистические, кот приходилось парсить), проще тогда конвертить в 1251.
пардон:
…вплоть до или что то вроде того, не помню точно
да емае
meta http-equiv=»Содержимое-Тип» .
класс все места хранения кодировки парсит
я не так уж туп чтобы забыть ро это
а ютф 8 по дефалту это какбы хорошо
ну если не возвращает сайт ничего про кодировку – админы быдла + программист долбоеб
все? это тег мета ))
судя по статьям очень даже ничего )
писать в утф и указывать кодировку это да – хорошо, но когда парсишь сотнями уже существующие быдло-страницы – приходится изголяться
это так, к слову просто…
щас, проглядел еще разок мануал, есть же параметр CURLOPT_HEADER
это на случай если меты нет
так хедер это же для реквеста. он окнечно используется когда надо. думаю сделаю хорошую либу + сайтег в ближ время. хватит этому порносайту существовать в чистом виде)))))
а насчет не указана, то! обучно это iso-8859 (могу с цифрами ошибиться) иначе браузер хуево отрендерит, а для браузера стандартная когда не указана – латин1(исо8859)