|
|||
|
Скрипт PHP: проверка доступности сайта fopen и cURLПроверка доступности сайта с помощью fopen()Скрипт, приведенный ниже, пытается прочитать страницу (картинку, css-файл и др.), по заданному url. Если ответ от сервера с содержимым не поступит в течении 10 секунд, сайт или то, что запрошено, будет считаться не доступным. $url = 'http://obovsem.org.ua/'; ini_set('default_socket_timeout', '10'); $fp = fopen($url, "r"); $res = fread($fp, 500); fclose($fp); if (strlen($res) > 0) echo 'Сайт '.$url.' доступен'; else echo 'Сайт '.$url.' не доступен'; По умолчанию в PHP ожидание ответа посланного с помощью сокетов (fopen) длится 60 сек. Проверка ответа сервера при помощи cURL (Libcurl)cURL - подключаемая библиотека (в PHP она называется Libcurl) для работы по различным протаколам, в том числе и HTTP. С ее помощью можно узнать ответ сервера, что позволяет определить, доступен ли запрашиваемый сайт в данный момент. Эта библиотека доступна практически на всех хостинг-площадках. Документацию по функциям и возможностям библиотеки cURL в PHP можно посмотреть тут: function check_domain_availible($domain) { if (!filter_var($domain, FILTER_VALIDATE_URL)) return false; $curlInit = curl_init($domain); curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curlInit, CURLOPT_HEADER, true); curl_setopt($curlInit, CURLOPT_NOBODY, true); curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curlInit); curl_close($curlInit); if ($response) return true; return false; } $url = 'http://obovsem.org.ua/'; if (check_domain_availible($url)) echo 'Сайт '.$url.' доступен'; else echo 'Сайт '.$url.' не доступен'; Функция check_domain_availible() пытается получить ответ от сервера, и если он есть, сайт считается доступным. Обратите внимание, что ответ от сервера может быть с каким угодно статусом HTTP: HTTP 301 (редирект на другую страницу), HTTP 404 (страница не найдена) и т.д. Детальную инфформацию о статусах HTTP можно посмотреть тут: " Функция filter_var() появилась в PHP 5 и служит заменой некоторых регулярных выражений, часто используемых в скриптах: проверка на соответствие введенных данных URL, E-mail и др. Документация по этой функции тут: Чтобы узнать только HTTP статус ответа сервера, и уже на его основании делать выводы о доступности или не доступности сайта, можно использовать скрипт, приведенный ниже: function check_http_status($url) { $user_agent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSLVERSION, 3); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $page = curl_exec($ch); $err = curl_error($ch); if (!empty($err)) return $err; $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $httpcode; } $url = 'http://obovsem.org.ua/'; $answer = check_http_status($url); echo 'Код статуса HTTP: '.$answer.'. Ответ на запрос URL: '.$url; Опубликовано: 2011/05/28
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/php.php?txt=20" target="_blank">Проверка доступности сайта средствами PHP: fopen и cURL</a> 63248
Комментарии
Спасибо, пригодилось!
мне тоже пригодилось , сенкс
Так, нашел неприятный баг в пхп 4-5.. если такого адреса ВООБЩЕ не существует, выводит ошибок на 7-8 строк.. проще так
else echo 'Сайт '.$url.' не доступен';
Код не влез, короче, @ini_set('default_socket_timeout', '10');$fp = @fopen($url, "r");$res = @fread($fp, 500);@fclose($fp);
Добавить комментарий
|