Проверка подключения к Интернету с помощью командной строки PHP на Linux

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

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

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

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

Если это 0 , вы не можете добраться до внешнего мира.

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

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

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

 if(!fsockopen("www.google.com", 80)) { echo "Could not open www.google.com, connection issues?"; } 

Я также предлагаю использовать 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 not (try to) сохранение в файл ..

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

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

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

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