Проверка статуса нескольких URL

Я хочу много доменных адресов для проверки статуса. Я пробую несколько завитушек, но это медленно

class BotCronJobs extends Controller {

    public function __construct() {
    }

    public function index() {
        $Query = servers::all();    

        $urls = [];
        foreach ($Query as $item){
            $urls[$item->id] = $item->serverUrl;
        }
        var_dump($this->test($urls));
    }

    public function test($urls = []) {

        $status = [];
        $mh = curl_multi_init();
        foreach($urls as $key => $value){
            $ch[$key] = curl_init($value);
            curl_setopt($ch[$key], CURLOPT_NOBODY, true);
            curl_setopt($ch[$key], CURLOPT_HEADER, true);
            curl_setopt($ch[$key], CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch[$key], CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch[$key], CURLOPT_SSL_VERIFYHOST, false);
            curl_multi_add_handle($mh,$ch[$key]);
        }

        do {
            curl_multi_exec($mh, $running);
            curl_multi_select($mh);
        } while ($running > 0);

        foreach(array_keys($ch) as $key){
            $status[$key][] = curl_getinfo($ch[$key], CURLINFO_HTTP_CODE);
            $status[$key][] = curl_getinfo($ch[$key], CURLINFO_EFFECTIVE_URL);
            curl_multi_remove_handle($mh, $ch[$key]);
        }

        curl_multi_close($mh);

        return $status;

    }
}

Мне просто нужно проверить, находится ли сервер в сети или нет, и у каждого сервера есть идентификатор, мне важно понимать, какой сервер отключен. есть ли более быстрый способ?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
42
1

Ответы 1

ваша функция мне кажется почти оптимальной. Я предполагаю, что это медленно, потому что некоторые домены не отвечают, а значение CURLOPT_CONNECTTIMEOUT по умолчанию слишком велико. попробуйте установить CURLOPT_CONNECTTIMEOUT на 1 и CURLOPT_TIMEOUT на 2, это должно заставить его остановиться максимум на 2 секунды на не отвечающих доменах.

Кроме того, если вам действительно не нужен код ответа http, но можно просто проверить, действительно ли сервер принимает соединения или нет, возможно, использование socket_ api будет быстрее.

Другие вопросы по теме