Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

PHP скрипт. Simple URL checker - виконання перевірок (cURL)


Вітаю всіх!

Як я і обіцяв, ми продовжуємо розробку програми для перевірки URL і сьогодні займемося безпосередньо виконанням перевірок.

Щоб трохи полегшити собі життя, перевірки ми будемо виконувати за допомогою бібліотеки cURL .

Ця бібліотека надає дуже широкі можливості для роботи з web ресурсами. Підтримуються редіректи, відправка даних, установка заголовків, автоматично збирається статистика і багато іншого. Природно, всі можливості гнучко налаштовуються. Загалом, при бажанні можна повністю імітувати роботу людини в інтернеті.

Тепер нам потрібно підключити цю бібліотеку до PHP . Для цього в файлі php.ini потрібно прибрати «;» на початку рядка extension = php_curl.dll. Після цього в відомостях, які повертає функція phpinfo () з'явиться розділ curl і в ньому параметр - cURL support: enabled.

Бібліотека підключена і можна починати її використовувати.

Для початку наведу невеликий приклад, який ілюструє основні принципи роботи з бібліотекою на PHP.

$ Ch = curl_init (); // ініціалізація curl_setopt ($ ch, CURLOPT_URL, 'http://www.google.com'); // встановлюємо URL curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1); // дозволяємо редирект curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // вказує, що функція curl_exec повинна повернути отриману відповідь, а не відправити його відразу браузеру $ result = curl_exec ($ ch); // запуск curl_close ($ ch); echo $ result;

Тут все досить просто. Функція curl_init инициализирует бібліотеку і створює об'єкт для роботи з нею ($ ch). Після цього за допомогою функції curl_setopt можна налаштувати бібліотеку. У першому параметрі цієї функції передаємо створений об'єкт, у другому - вказуємо ім'я параметра, який потрібно налаштувати, а в третьому - значення параметра.

Після цього викликаємо функцію curl_exec, яка і виконує всю роботу, тобто відправляє запит і отримує дані.

Повертаємося до нашого додатком.

Як я і говорив у Минулого разу , Всю роботу по перевірці URL виконує метод ping. Розглянемо його докладніше.

function ping ($ urlId = 0) {$ this-> load-> model ( 'urlmodel'); $ This-> load-> model ( 'resultmodel'); $ Urls = array (); if ($ urlId == 0) {// отримуємо повний список URL з БД $ urls = $ this-> urlmodel-> getAllUrls (); } Else {// шукаємо обраний URL $ urls = $ this-> urlmodel-> getUrlById ($ urlId); } If ($ urls! == FALSE) {// створюємо обробник для паралельної роботи з URL'амі $ mh = curl_multi_init (); // створюємо обробники для кожного окремого URL і додаємо їх в $ mh $ handles = array (); for ($ i = 0; $ i <count ($ urls); $ i ++) {$ handles [$ i] = curl_init (); curl_setopt ($ handles [$ i], CURLOPT_URL, $ urls [$ i] [ 'URL']); curl_setopt ($ handles [$ i], CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ handles [$ i], CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ handles [$ i], CURLOPT_TIMEOUT, 10); curl_setopt ($ handles [$ i], CURLOPT_HEADER, 0); // якщо використовується проксі, потрібно вказати його порт і ip // curl_setopt ($ handles [$ i], CURLOPT_PROXYPORT, "8080"); // curl_setopt ($ handles [$ i], CURLOPT_PROXY, "192.168.0.1"); curl_multi_add_handle ($ mh, $ handles [$ i]); } // запускаємо обробку $ running = null; do {curl_multi_exec ($ mh, $ running); } While ($ running> 0); // отримуємо дані і зберігаємо їх в БД for ($ i = 0; $ i <count ($ urls); $ i ++) {$ urlInfo = curl_getinfo ($ handles [$ i]); $ ResData [ 'urlId'] = $ urls [$ i] [ 'id']; if ($ urlInfo [ 'speed_download']! = 0) {$ resData [ 'result'] = 1; } Else {$ resData [ 'result'] = 0; } $ ResData [ 'responsetime'] = $ urlInfo [ 'total_time']; $ ResData [ 'responselength'] = $ urlInfo [ 'size_download']; $ ResData [ 'responsespeed'] = $ urlInfo [ 'speed_download']; $ This-> resultmodel-> saveResults ($ resData); } // закриваємо обробники for ($ i = 0; $ i <count ($ handles); $ i ++) {curl_multi_remove_handle ($ mh, $ handles [$ i]); } If ($ urlId == 0) {$ this-> index (); } Else {$ this-> urldetails ($ urlId); }}}

Як бачите, метод досить об'ємний і досить сильно відрізняється від першого прикладу. Але про все по порядку.

Після завантаження моделей, ми перевіряємо значення параметра $ urlId. Якщо він дорівнює нулю, то виконуємо перевірку всіх URL в базі даних, якщо немає - перевіряємо тільки заданий URL.

Тепер нам потрібно перевірити знайдені в базі даних URL. Якщо цей URL один, то все досить просто, можна обмежитися кодом з першого прикладу, але у нас може бути кілька десятків URL. Запустити перевірки в циклі, звичайно, можливо, але це скрипт при цьому може виконуватися досить довго. А в більшості випадків час роботи скриптів обмежена (параметр max_execution_time).

Тому тут ми використовуємо функцію curl_multi_init () (рядок 15) для паралельної обробки декількох запитів. По-суті, об'єкт, який створює curl_multi_init, є контейнером для звичайних оброблювачів.

Після цього в циклі (рядки 18-30) за допомогою curl_init ми створюємо масив об'єктів для роботи з кожним URL, налаштовуємо його і за допомогою функції curl_multi_add_handle додаємо в контейнер (рядок 29).

Зверніть увагу на параметр CURLOPT_TIMEOUT (рядок 23). Я встановив його рівним 10 секундам. Це час на протязі якого cURL чекатиме відповідь сервера. Значення я взяв «зі стелі», тому якщо воно вас не влаштовує, можете спокійно його змінити.

Зараз все готово для початку перевірок. Запуск виконується функцією curl_multi_exec, яка приймає два параметри. Перший - створений об'єкт з обработчиками, другий - змінна, яка вказує завершилася обробка чи ні.

Функція curl_multi_exec викликається всередині циклу, вихід з якого виконується, коли змінна $ running буде дорівнює нулю, тобто завершиться обробка всіх URL.

Після цього нам залишається тільки отримати дані про перевірки за допомогою функції curl_getinfo (рядок 38) і сформувати масив з результатами ($ resData).

На завершальному етапі ми зберігаємо дані в БД (рядок 49), за допомогою функції curl_multi_remove_handle закриваємо обробники (рядок 53) і показуємо відвідувачу сторінку, з якої був викликаний метод (рядки 55-60).

Усе. Метод для виконання перевірок готовий. Наступного разу ми розглянемо створення уявлень, тобто сторінок сайту.

До зустрічі!

PS Посилання на всі статті та приклади циклу я публікую тут .

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.