Как видите, метод довольно объемный и достаточно сильно отличается от первого примера. Но обо всем по порядку. После загрузки моделей, мы проверяем значение параметра $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). Все. Метод для выполнения проверок готов. В следующий раз мы рассмотрим создание представлений, т. е. страниц сайта. До встречи! P. S. Ссылки на все статьи и примеры цикла я публикую здесь.