Проверка доступности сервера на PHP+JQuery
В этой статье мы проверяли доступность сервера, пользуясь классическими возможностями PHP. Теперь посмотрим, как решить эту задачу с помощью фреймворка JQuery. Предполагается, что к index.html
подключены из текущей папки jquery.js и jquery.form.js, их легко найти по ссылкам. В простейшем случае код файла index.html
может быть таким:
<html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.form.js"></script> </head> <body> <!-- форма ввода - без тега form, во избежание попыток отправить данные по GET --> <input id="site_name"></input> <button onclick="onClick()">Проверить</button> <!-- клиентское приложение (JQuery) --> <script type="text/javascript"> var RequestIsSending=false; function changeCursor (type) { if (type) { $("body").css("cursor","wait"); //Курсор ожидания для элементов $("button").css("cursor","wait"); $("input").css("cursor","wait"); } else { $("body").css("cursor","default"); //Вернуть курсор по умолчанию $("button").css("cursor","default"); $("input").css("cursor","text"); } } function onClick() { //Клик по кнопке if (!RequestIsSending) { RequestIsSending=true; changeCursor(true); $.ajax ({ type:'POST', url:'test.php', data: ({ val:$("#site_name").val() }), complete: function (response) { RequestIsSending=false; console.log(response); alert (response.responseText.substring(response.responseText.lastIndexOf(">")+1,response.responseText.length)); changeCursor(false); }, error: function () { alert("Bad response from server script!"); } }); $("#site_name").focus(); } } $('#site_name').keydown(function(event) { //Отправка запроса по Enter if (!RequestIsSending) { if (event.keyCode == 13) { onClick(); } } else return false; }); </script> </body></html>
Серверный скрипт test.php
расположен в той же папке, что и index.html
, он проверяет корректность адреса несложным регулярным выражением, затем доступность хоста методом file_get_contents
и возвращает результат стандартным echo
:
<?php $reg_exp="/^(http[s]?:(\/\/))?(www\.)*([\-\w\dА-Яа-яёЁ]+\.)+([\w|А-Яа-яёЁ]){2,6}|$/"; $_POST["val"]=trim($_POST["val"]); $_POST["val"]=str_replace("\\","/",$_POST["val"]); preg_match($reg_exp,$_POST["val"],$match); if ($match[0]){ if (($match[1]!="http://") && ($match[1]!="https://")) $_POST["val"]="http://".$_POST["val"]; if (file_get_contents($_POST["val"])) echo "Данный сервер отвечает"; else echo "Данный сервер не отвечает"; } else echo "Адрес не распознан как допустимый"; ?>
Предполагается, что оба файла - в Юникоде без BOM (UTF-8), index.html
вызван по протоколу http://
, а не file://
(то есть, размещён на локальном хосте, а не открыт в браузере как файл).
23.11.2015, 17:05 [6813 просмотров]