Проверка интернет-соединения с помощью командной строки PHP на Linux - PullRequest
2 голосов
/ 10 сентября 2009

Я использую командную строку PHP на Linux для открытия подключения по Bluetooth, и мне нужен быстрый и простой способ проверить, активно ли подключение к Интернету. Ну, не должно быть грязным, но быстро ценится. :) Использование exec для запуска внешних команд не является проблемой.

Я думаю о пинге с какого-нибудь стабильного сервера (например, Google), но мне интересно, есть ли какой-нибудь лучший способ. Может быть, проверка вывода ifconfig? Команда, которая ответила бы четким ответом вроде («не может подключиться к серверу», «подключена»), была бы, конечно, лучшей. Идеи?

Ответы [ 5 ]

11 голосов
/ 11 сентября 2009

Если вы хотите что-то, что будет работать, не полагаясь на внешний сервер, вы можете проверить маршрут по умолчанию. Эта команда выведет количество маршрутов по умолчанию:

/sbin/route -n | grep -c '^0\.0\.0\.0'

Если это 0, вы не можете попасть во внешний мир.

5 голосов
/ 10 сентября 2009

Если вам удобно использовать exec, я бы (для проверки вашего интернет-соединения) пропинговал DNS-серверы вашего провайдера (по IP)

exec("ping -c 1 $ip 2>&1", $output, $retval);

Возможно, вы также можете сделать это на чистом PHP, используя fsockopen , чтобы попытаться получить страницу с www.google.com (сценарий wget / curl).

if(!fsockopen("www.google.com", 80)) {
    echo "Could not open www.google.com, connection issues?";
}  
3 голосов
/ 10 сентября 2009

Я предлагаю также использовать ping .. Вы можете использовать что-то вроде:

exec("ping -c 4 www.google.com", $output, $status);
if ($status == 0) {
  // ping succeeded, we have connection working
} else {
  // ping failed, no connection
}

Если вы решили использовать wget, не забудьте добавить http: // к URL-адресу страницы, которую вы хотите загрузить, и я предлагаю добавить «-q -O -» в опции, чтобы wget не (пытаться) сохранение в файл ..

Еще один способ сделать это - использовать curl / sockets на php, но я думаю, что это не самый быстрый способ, которым вы ищете ..

2 голосов
/ 10 сентября 2009

Вы можете использовать wget для некоторой внешней сети с параметром timeout -W для такой вещи. Возвращает 1, если время истекло без успеха, и 0, если оно достигнуто в течение времени ожидания. Кроме того, ping может использоваться для таких целей, как вы предложили.

0 голосов
/ 23 сентября 2009

Интернет-соединение? Что это? Пожалуйста, определите"подключение к интернету"! Вы хотите проверить, подключен ли пользователь - куда? На сервер вашей компании? Ну, пинг это! Или куда? Хорошо, пингуйте google.com, но при этом вы будете только проверять, подключен ли пользователь к серверу google, поскольку системный администратор может запретить все остальные сайты.

Как правило, сетевая маршрутизация - это такой домен, где вы не можете проверить, подключены ли вы к какому-то «Интернету». Вы можете проверить только определенные серверы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...