Проверка, если веб-сайт находится в сети с помощью скрипта PHP

Мне нужно создать PHP скрипт, который может успешно проверить, если веб-сайт в настоящее время онлайн/все еще активен.

У меня есть список около 3000 веб-сайтов для проверки, и я хочу настроить задание CRON для запуска сценария на ежедневной основе, чтобы убедиться, что сайты все еще активны.

Я провел некоторые исследования и построил что-то, используя этот пример:

<?php

       if (isDomainAvailible('http://www.css-tricks.com'))
       {
               echo "Up and running!";
       }
       else
       {
               echo "Woops, nothing found there.";
       }

       //returns true, if domain is availible, false if not
       function isDomainAvailible($domain)
       {
               //check, if a valid url is provided
               if(!filter_var($domain, FILTER_VALIDATE_URL))
               {
                       return false;
               }

               //initialize curl
               $curlInit = curl_init($domain);
               curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
               curl_setopt($curlInit,CURLOPT_HEADER,true);
               curl_setopt($curlInit,CURLOPT_NOBODY,true);
               curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

               //get answer
               $response = curl_exec($curlInit);

               curl_close($curlInit);

               if ($response) return true;

               return false;
       }
?>

Но это всегда тайм-аут после 300 или около того проверок, зная, что это может быть проблема выполнения PHP, мне было интересно, есть ли лучший или более быстрый метод для проверки этих веб-сайтов.

2 ответа

  1. Предполагая, что ссылки хранятся в базе данных, вы можете добавить в поле Дата таблицы БД, например ‘last_check’ и обновить дату после проверки.

    но 5 секунд на сайт, умноженные на более чем 3000 сайтов, означают 250 минут, которые я не думаю, что это возможное решение? — SNpn

    SQL-запрос должен выбрать «last_check», где «last_check» не соответствует текущей дате. Ограничение до 10 результатов на запрос.

    Установите cron для запуска PHP скрипта каждую минуту, с полуночи до 6 утра.

    * 0-6 * * * *   PATH/TO/YOUR/PHP/SCRIPT
    
  2. Вы также можете использовать такие функции, как fopen (), если директива allow_url_fopen включена:

    $handle = fopen("http://www.example.com/", "r");
    

    или stream_context_create():

    $opts = array('http' => array(
        'method'=>"GET",
    ));
    $context = stream_context_create($opts);
    $fp = fopen('http://www.example.com', 'r', false, $context);
    fpassthru($fp);
    fclose($fp);