Лучший и простой способ проверить доступ в Интернет.PHP Cronjob - PullRequest
0 голосов
/ 21 октября 2018

Это мои настройки:

Я запускаю cronjob у себя дома, используя raspberry pi 3. Каждую 1 минуту этот cronjob запускает php-файл, который требует работающего подключения к Интернету.Чтобы проверить, работает ли интернет у меня дома (привередливый интернет), я изменил и реализовал следующую функцию в начале моего файла:

function is_connected_true_false()
{
    $multiple_domains = array('www.example.com', 'www.google.com', 'www.bing.com');
    $random_domain_used = $multiple_domains[rand(0,2)];
    $connected = @fsockopen($random_domain_used, 80, $errno, $errstr, 10);
    if($connected) {
        $is_conn = true;
        fclose($connected);
    } else {
        $is_conn = false; //action in connection failure
        // Log error to the server
        //$errno; // Error #
        //$errstr; // Error as a string
    }
    return $is_conn;
}

Пока это работает, но я верю, что будустолкнуться с некоторыми проблемами в будущем.

Этот cronjob запускает файл php каждую 1 минуту!Это 1440 запросов веб-сайта в день!из моего дома ip.

Я добавил как минимум 3 разных домена, я не хочу, чтобы мой ip попал в черный список.Я выбираю эти 3 домена из-за их надежности и времени загрузки.

Также кажется, что загрузка страниц занимает некоторое время (иногда несколько секунд, привередливый интернет ...).

ТамВероятно, более широкое использование полосы пропускания при открытии всего сайта, а не при пингеЯ не могу использовать (код возврата / состояние выхода) при вызове веб-сайта x из-за длительного требуемого значения времени ожидания.В противном случае, я бы использовал это.

Решение / Улучшение?

Могу ли я пропинговать сервер 8.8.8.8 или любой другой надежный сервер вместо полной загрузки веб-сайта, чтобы проверить, работает ли интернет?Если так, то как?Могу ли я достичь того же результата, что и в текущей функции?

Я пробовал 8.8.8.8 вместо доменов сайта, но, похоже, он не работает.Не знаю почему.

Другое: Пожалуйста, имейте в виду, PHP любитель здесь.Хотя я провел некоторые исследования, я не разбираюсь в сетевых протоколах, TCP, HTTP, ICMP, пакетах и ​​подобных вещах, но все же!

Источник, откуда я получил код: Определить в phpскрипт, если он подключен к интернету?

РЕДАКТИРОВАТЬ: -ochi предложила мне вместо этого купить или арендовать услуги хоста / VPS.Это может сработать.Тем не менее, я считаю, что есть лучший способ.спасибо.

EDIT2: я обнаружил, что пинг к серверу использует другой протокол или порт, чем HTTP-запрос, как я могу убедиться, что порт 80 работает?Должен ли я просто добавить больше сайтов в мой массив функций для распределения трафика / запросов?

1 Ответ

0 голосов
/ 21 октября 2018

Я бы не волновался об этом.Быстрый поиск в Google показывает, что Google утверждает, что обслуживает 40 тыс. Запросов в секунду.

Кроме того, Google, Bing и все другие гиганты используют циклический DNS, и эти IP-адреса указывают на балансировщики нагрузки, поэтому даже если вы локально кэшировали информацию DNS, вам все равно придется переключаться между каждым из указанных серверов.и больше.

ivan@darkstar:~$ nslookup www.google.com
Server:     192.168.1.2
Address:    192.168.1.2#53

Non-authoritative answer:
Name:   www.google.com
Address: 74.125.141.99
Name:   www.google.com
Address: 74.125.141.106
Name:   www.google.com
Address: 74.125.141.147
Name:   www.google.com
Address: 74.125.141.103
Name:   www.google.com
Address: 74.125.141.105
Name:   www.google.com
Address: 74.125.141.104
Name:   www.google.com
Address: 2607:f8b0:400c:c06::67

Ваш 1 запрос в минуту не является даже каплей в океане, насколько они обеспокоены.

...