Я использую 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, так как все остальные сайты могут быть заблокированы системным администратором.
Как правило, сетевая маршрутизация является таким доменом, где вы не можете проверить, подключены ли вы к каким-то «Интернет». Вы можете проверить только определенные серверы.