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, как описано здесь и здесь. По сути, вы попытаетесь открыть этот веб-сайт, и если что-то загружается, вы предполагаете, что он работает и работает, если он не загружается, вы предполагаете, что веб-сайт не работает.