PHP получает информацию, если сеть не работает

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

4 ответа

Решение

Нет необходимости в сложных сокетах и ​​другой удаленной обработке. Вы можете проверить, действительно ли возвращенное изображение является изображением, используя библиотеку PHP GD:

if( !$size = getimagesize($filename) ) {
   $image = 'images/default.jpg';
}

Попробуй это:

<?php
   function GetServerStatus($site, $port)
   {
      $fp = @fsockopen($site, $port, $errno, $errstr, 2);
      if (!$fp) 
        return false;
      else
        return true;
   }
?>

передайте ему сайт (или IP) и порт, и он вернет false, если сайт не работает, и true, если сайт работает. Это по крайней мере скажет вам, если сайт не работает или нет.

Чтобы знать, что сайт не работает, вам нужно попытаться получить от него некоторые данные (веб-страницу, изображение и т. Д.) И использовать тайм-аут. Если в течение этого периода данные не возвращаются, предположим, что они не работают.

Вот простой способ:

<?php

ini_set('default_socket_timeout', 5);

function getNetworkStatus(url) {
  return ( file_get_contents(urlencode($url)) !== false )
}

?>

Проблема в том, что вы не можете просто продолжать запрашивать удаленный сервер, так как это добавит большую задержку к вашей странице / приложению - вам нужно будет кэшировать эту информацию в течение некоторого периода времени (база данных, файл и т. Д.).

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

Другие вопросы по тегам