Jeurey
Хранитель порядка
- Регистрация
- 13 Сен 2006
- Сообщения
- 419
- Реакции
- 614
- Автор темы
- #1
Классы-обертки вокруг curl и curl_multi
Наверное, многие знают, что мя тянет пописать сервисные приложения на php. И, конечно, делать это без фреймворка - дело неблагодарное.
Посему мною был написал ряд библиотечных классов, которыми я собираюсь поделиться с общественностью фидбэка ради.
Начну с библиотек сетевых подключений, а-ля обертка вокруг функций curl и curl_multi.
В библиотеке представлено два функциональных класса:
Набор классов можно скачать следующими способами:
Как использовать?
Ниже Вы можете увидеть примеры использования классов:
Pi_MultiCurl
[/SPOIL]
Pi_Curl
[spoil]
Обработка curl_exec идет напрямую, ввиду заточенности решения под использование классом Pi_MultiCurl. Обещаю поправить
Собственно, все. Описать работу Pi_MultiCurl_Proxy обещаю в ближайшее время. Не описан здесь потому, что есть зависимость от стороннего класса Pi_ProxyDispatcher, экземпляр которого является диспетчером прокси-списков.
UPD: данный класс писался для собственного proxy-комбайна. Dev-версия лежит на рапиде и доступна для скачивания. Размера не пугайтесь - в ней зашит проект, дамп базы, визуальный фреймворк и приложения. Если кому нужно - забираем тут:
Спасибо за внимание
Наверное, многие знают, что мя тянет пописать сервисные приложения на php. И, конечно, делать это без фреймворка - дело неблагодарное.
Посему мною был написал ряд библиотечных классов, которыми я собираюсь поделиться с общественностью фидбэка ради.
Начну с библиотек сетевых подключений, а-ля обертка вокруг функций curl и curl_multi.
В библиотеке представлено два функциональных класса:
- Pi_Curl
- Pi_MultiCurl
Набор классов можно скачать следующими способами:
- Для просмотра ссылки Войди
или Зарегистрируйся - наиболее актуальную версию Вы можете найти именно здесь - Для просмотра ссылки Войди
или Зарегистрируйся - описанная версия - аттач
Как использовать?
Ниже Вы можете увидеть примеры использования классов:
Pi_MultiCurl
PHP:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include 'libs/curl/pi_curl_exception.php';
include 'libs/curl/pi_curl.php';
include 'libs/multicurl/pi_multicurl_exception.php';
include 'libs/multicurl/pi_multicurl.php';
$urls = file('urls.txt');
$results = array();
try {
// Создаем объект MultiCurl
$cURL = new Pi_MultiCurl();
} catch (Pi_MultiCurl_Exception $e) {
// Обработка исключения
echo $e->getMessage();
exit();
}
define('URL_STACK_COUNT', 15);
// Количество потоков
$cURL->setThreadsCount(URL_STACK_COUNT);
// Таймаут потока
$cURL->setThreadTimeout(3);
// Перерыв между потоками в мс
$cURL->setUsleepTime(300);
$fwBad = fopen('bad.txt', 'w+');
$fwGood = fopen('good.txt', 'w+');
while(sizeof($urls)) {
$i = URL_STACK_COUNT; // Будем ложить столько же, сколько и размер стэка
$_urls = array(); // Очищаем список адресов, которые мы будем ложить в поток
while($i-- && sizeof($urls)) {
$_urls[] = trim(array_pop($urls));
}
$cURL->setUrls($_urls);
$results = $cURL->getUrls();
if($results == Pi_MultiCurl::E_EMPTY_URLS_LIST) {
continue ;
}
foreach ($results as $thread) {
// Если скрипт не мог получить страницу
if(!strlen($thread['contents']) || $thread['errors']) {
continue ;
}
if(stripos($thread['contents'], 'some_substring') !== false) {
fwrite($fwGood, $thread['url'] . "\n");
} else {
fwrite($fwBad, $thread['url'] . "\n");
}
}
}
fclose($fwBad);
fclose($fwGood);
unset($cURL);
Pi_Curl
[spoil]
Обработка curl_exec идет напрямую, ввиду заточенности решения под использование классом Pi_MultiCurl. Обещаю поправить
PHP:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include 'libs/curl/pi_curl_exception.php';
include 'libs/curl/pi_curl.php';
$cURL = new Pi_Curl;
$cURL->setDefaultOptions();
$cURL->setOption('URL', 'http://yandex.ru/');
$cURL->setOption('TIMEOUT', 10);
$cURL->applyOptions();
$result = curl_exec($cURL->getHandle());
Собственно, все. Описать работу Pi_MultiCurl_Proxy обещаю в ближайшее время. Не описан здесь потому, что есть зависимость от стороннего класса Pi_ProxyDispatcher, экземпляр которого является диспетчером прокси-списков.
UPD: данный класс писался для собственного proxy-комбайна. Dev-версия лежит на рапиде и доступна для скачивания. Размера не пугайтесь - в ней зашит проект, дамп базы, визуальный фреймворк и приложения. Если кому нужно - забираем тут:
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Спасибо за внимание