От автора: Идею для этого урока я взял из комментариев пользователей ресурса //webformyself.com/. В частности, интересовал такой вопрос: «Как определить IP-адрес компьютера?». Попробуем разобраться, как это можно сделать, и заодно узнаем еще несколько вещей, которые, безусловно, могут пригодиться Вам в создании веб-приложений.
Время ролика: 19:50
Ссылка для скачивания исходников: Скачать одним архивом
Ссылка для скачивания всего архива (видео+исходники): Скачать одним архивом. Размер: 33.1 mb.
Итак сразу скажу, для того чтобы понять как определить IP-адрес, много кода писать не придется ибо все уже написано до нас. Нам же остается просто знать, как это использовать. Под «этим» в данном случае понимается суперглобальный массив $_SERVER, в который интерпретатор PHP помещает переменные, полученные от сервера. О том, что такое массив, я подробно рассказываю и показываю в уроке по созданию галереи. Вкратце можно сказать, что массив — это своеобразная большая переменная, в которой можно хранить обычные переменные. Переменных в глобальном массиве $_SERVER довольно много. Мы же сегодня поговорим лишь о некоторых из них. Эти переменные, кстати, еще называются также элементами массива. И первые два элемента, о которых мы поговорим — это элементы, благодаря которым можно получить имя сервера, на котором выполняется скрипт.
1. Имя сервера
Создадим страницу (у меня это index.php) и напишем в нее следующий код:
1 2 3 |
<?php echo $_SERVER['SERVER_NAME']; ?> |
Здесь мы выводим на экран элемент массива $_SERVER по имени SERVER_NAME, в котором как раз и содержится информация о сервере. Если Вы тестируете скрипт на локальном сервере, то в качестве имени сервера получим — "localhost".
Аналогичный результат можно получить при обращении к элементу HTTP_HOST:
1 2 3 |
<?php echo $_SERVER['HTTP_HOST']; ?> |
Где может пригодиться использование этих элементов массива $_SERVER?. Допустим, у нас есть сайт на домене //mydomen.ru. Соответственно, если на этом сайте используются абсолютные ссылки, то мы столкнемся с определенными трудностями при переносе сайта на новый домен, к примеру, //newdomen.ru. Нам придется менять все абсолютные ссылки. Вот здесь нам как раз и могут пригодиться эти элементы.
2. Откуда пришел пользователь
Часто нам необходимо узнать с какой именно страницы к нам попал пользователь. В этом нам может помочь элемент по имени HTTP_REFERER. В этом элементе как раз и содержится адрес страницы, с которой пользователь попал на страницу, на которой мы вызываем элемент HTTP_REFERER. Переход, соответственно, должен происходить по ссылке. Создадим еще одну страницу, например test.php, и в ней пропишем ссылку на страницу index.php. На странице index.php пропишем код:
1 2 3 |
<?php echo $_SERVER['HTTP_REFERER']; ?> |
Теперь попробуем перейти по ссылке. В своем случае я получу такой адрес страницы — //localhost/arr_server/test.php (обе страницы у меня в каталоге arr_server, а сам скрипт тестируется на локальном сервере).
3. Информация о клиенте
Если нам необходимо собирать статистическую информация, например, пользователи с какими браузерами посещают наш сайт, то мы можем использовать для этих целей элемент HTTP_USER_AGENT:
1 2 3 |
<?php echo $_SERVER['HTTP_USER_AGENT']; ?> |
В результате на экран в моем случае будет выведена строка — «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.15) Gecko/20110303 AskTbPTV2/3.9.1.14019 Firefox/3.6.15». Из нее можно узнать, что я использую браузер Firefox версии 3.6.15. Также можно узнать, что версия моей операционной системы — Windows XP — об этом говорит эта часть строки — Windows NT 5.1.
Определение IP-адреса клиента
А теперь собственно то, для чего мы и затеяли данный урок — определение IP-адреса компьютера пользователя, заполнявшего нашу форму. Информация об этом адресе содержится в элементе REMOTE_ADDR:
1 2 3 |
<?php echo $_SERVER['REMOTE_ADDR']; ?> |
Если Вы тестирует скрипт на локальном сервере, то получите такой IP-адрес — 127.0.0.1. Если тестируете в сети — получите IP-адрес, под которым зашли в сеть. Как же нам передать IP-адрес клиента, который заполнял форму? Сам он его, конечно же, вряд ли вводить будет, поэтому нам остается определить этот адрес при помощи элемента REMOTE_ADDR массива $_SERVER и скрытно от клиента отослать его. Сделать это можно несколькими способами. Мы будем использовать скрытое поле формы. Создадим простую форму на странице test.php:
1 2 3 4 |
<form method="post" action="index.php"> <input type="text" name="name" /> <input type="submit" name="submit" /> </form> |
Данные из этой формы будут передаваться методом POST, в качестве обработчика данных мы указали файл index.php (детально обо всем этом я рассказываю в мини-курсе по созданию полноценной формы обратной связи). На странице index.php давайте будем принимать эти данные и выводить их:
1 2 3 4 5 6 |
<?php if($_POST['submit']){ echo 'Введено имя: ' .$_POST['name']. '<br />'; echo '<a href="' .$_SERVER['HTTP_REFERER']. '">Назад</a>'; } ?> |
Здесь мы проверили, была ли нажата кнопка формы и, если она нажата, мы выводим то, что получили в качестве имени. А ниже мы прописали ссылку на ту страницу, откуда пришли, т.е., на страницу с формой. Об условиях, глобальном массиве $_POST и прочих вещах, которые мы только что использовали, я также детально рассказывал в мини-курсе по созданию формы обратной связи. Мы все делаем максимально упрощенно, без особых проверок, поскольку целью урока является простая передача IP-адреса клиента и не больше.
Итак, имя мы получаем. Теперь осталось передать скрытно от пользователя его IP-адрес. Для этого допишем на странице с формой еще одно поле, типом которого укажем hidden (т.е., скрытое), а в качестве его значения укажем элемент REMOTE_ADDR:
1 2 3 4 5 |
<form method="post" action="index.php"> <input type="text" name="name" /> <input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" /> <input type="submit" name="submit" /> </form> |
Если мы сейчас обновим страницу с формой, то ничего не изменится… но если мы посмотрим исходный код этой страницы, то увидим следующее:
1 2 3 4 5 |
<form method="post" action="index.php"> <input type="text" name="name" /> <input type="hidden" name="ip" value="127.0.0.1" /> <input type="submit" name="submit" /> </form> |
Интерпретатор PHP в качестве значения скрытого поля прописал IP-адрес клиента, который и будет отправлен на страницу index.php, и этот адрес будет находиться в переменной ip глобального массива $_POST. Осталось дописать вывод в файле index.php:
1 2 3 4 5 6 7 |
<?php if($_POST['submit']){ echo 'Введено имя: ' .$_POST['name']. '<br />'; echo 'IP пользователя: ' .$_POST['ip']. '<br />'; echo '<a href="' .$_SERVER['HTTP_REFERER']. '">Назад</a>'; } ?> |
Вот, в принципе, и все. Вот так вот просто при помощи элементов массива $_SERVER мы можем получить массу служебной информации, которую затем можем использовать в своих веб-приложениях. Мы рассмотрели только пять элементов массива $_SERVER, на самом деле их, как уже говорилось выше, гораздо больше и без них часто сложно организовать функционирование достаточно серьезного проекта.
На этом, урок по определению IP-адреса компьютера окончен. До новых встреч!
Комментарии (81)