Подтвердить что ты не робот

Определить в PHP скрипт при подключении к Интернету?

Как я могу проверить, подключен ли я к Интернету с моего PHP script, который работает на моей машине dev?

Я запускаю script для загрузки набора файлов (которые могут или не могут существовать) с помощью wget. Если я попробую скачать без подключения, wget переходит к следующему, думая, что файл отсутствует.

4b9b3361

Ответ 1

<?php
function is_connected()
{
    $connected = @fsockopen("www.example.com", 80); 
                                        //website, port  (try 80 or 443)
    if ($connected){
        $is_conn = true; //action when connected
        fclose($connected);
    }else{
        $is_conn = false; //action in connection failure
    }
    return $is_conn;

}
?>

Ответ 2

Вы всегда можете ping good 'ol trusty google:

$response = null;
system("ping -c 1 google.com", $response);
if($response == 0)
{
    // this means you are connected
}

Ответ 3

Этот код не работает в laravel 4.2 php framework с ошибкой внутреннего сервера 500:

<?php
     function is_connected()
     {
       $connected = @fsockopen("www.some_domain.com", 80); 
        //website, port  (try 80 or 443)
       if ($connected){
          $is_conn = true; //action when connected
          fclose($connected);
       }else{
         $is_conn = false; //action in connection failure
       }
      return $is_conn;
    }
?>

Что я не хотел подчеркивать, чтобы понять это, поэтому я пробовал этот код, и это сработало для меня:

function is_connected()
{
  $connected = fopen("http://www.google.com:80/","r");
  if($connected)
  {
     return true;
  } else {
   return false;
  }

} 

Обратите внимание: это основано на предположении, что соединение с google.com менее подвержено сбою.

Ответ 4

Почему вы не получаете код возврата из wget, чтобы определить, была ли загрузка успешной? Список возможных значений можно найти в статусе выхода wget.

С другой стороны, вы могли бы использовать php функции curl, а затем вы можете отслеживать ошибки в PHP.

Ответ 5

Существуют различные факторы, определяющие подключение к Интернету. Состояние интерфейса, например. Но, если учесть, что из-за природы сети правильная конфигурация не имеет никакого отношения к рабочему соединению.

Так что лучше всего попытаться загрузить файл, который вы определенно существуете. Если вам это удастся, вы можете перейти к следующим шагам. Если нет, повторите попытку, а затем выполните сбой.

Попробуйте выбрать один на целевом хосте. Если это невозможно, выберите какой-то крупный веб-сайт, например google или yahoo.

Наконец, попробуйте проверить код ошибки, возвращаемый wget. Бьюсь об заклад, они различаются для 404-х и тайм-аутов. Вы можете использовать третий параметр в вызове exec:

string exec (строка $command [, array & $output [, int & $return_var]])

Ответ 6

http://www.weberdev.com/get_example-4025.html

Тонны примеров на google. Однако, если вы потеряли соединение во время загрузки, не ожидайте, что оно будет таким же простым, как это.

Ответ 7

Вы можете выполнить ping на популярный сайт или на сайт, из которого вы зашли (например, www.google.nl), затем проанализируйте результат, чтобы узнать, можете ли вы подключиться к нему.

<?php
$ip = '127.0.0.1'; //some ip
exec("ping -n 4 $ip 2>&1", $output, $retval);
if ($retval != 0) { 
echo "no!"; 
} 
else 
{ 
echo "yes!"; }
?>

Ответ 8

Просто проверьте результат wget. Код состояния 4 указывает на сетевую проблему, код состояния 8 указывает на ошибку сервера (например, 404). Это работает, только если вы вызываете wget для каждого файла последовательно, а не раз для всех файлов.

Вы также можете использовать libcurl с PHP вместо вызова wget. Что-то вроде:

foreach (...) {
    $c = curl_init($url);
    $f = fopen($filepath, "w")
    curl_setopt($c, CURLOPT_FILE, $f);
    curl_setopt($c, CURLOPT_HEADER, 0);
    if (curl_exec($c)) {
        if (curl_getinfo($c, CURLINFO_HTTP_CODE) == 200) {
            // success
        } else {
            // 404 or something, delete file
            unlink($filepath);
        }
    } else {
        // network error or server down
        break; // abort
    }
    curl_close($c);
}

Ответ 9

Принятый ответ не помог мне. Когда интернет был отключен, он выбросил ошибку php. Поэтому я использовал его с небольшой модификацией, которая ниже:

if(!$sock = @fsockopen('www.google.com', 80))
{
    echo 'Not Connected';
}
else
{
echo 'Connected';
}

Ответ 10

Эта функция обрабатывает то, что вам нужно

function isConnected()
{
    // use 80 for http or 443 for https protocol
    $connected = @fsockopen("www.example.com", 80);
    if ($connected){
        fclose($connected);
        return true; 
    }
    return false;
}