Как получить ip адрес компьютера php

Обновлено: 06.07.2024

Как в PHP узнать IP пользователя и определить его страну?

Получить IP адрес клиента в PHP можно через суперглобальный массив $_SERVER . В этом массиве IP адрес посетителя доступен через ключ REMOTE_ADDR .

Определение страны по ip с помощью Sypex Geo

Основные шаги по созданию php скрипта, с помощью которого можно будет определять страну по ip:

1. Скачаем Sypex Geo для PHP и базу данных стран. Sypex Geo распространяется по лицензии BSD, т.е. является абсолютно бесплатным.

2. Распакуем архивы и загрузим на сервер файлы «SxGeo.php» и «SxGeo.dat». В качестве примера, создадим на сервере папку SxGeo и загрузим эти файлы в неё.

3. Создадим свой скрипт, например, «get_country_code.php».

4. Вставим в этот файл следующий код:

5. Включим файл «get_country_code.php» в другие скрипты, в которых нужно реализовать выполнение кода в зависимости от принадлежности ip посетителя к той или иной стране.

Определение города по ip с помощью Sypex Geo

Для определения города, потребуется загрузить архив с базой данных городов для Sypex Geo, распаковать его и загрузить на сервер.

Скрипт в этом случае будет следующий:

Для автоматического обновления баз можно воспользоваться этим архивом. В этом архиве находится php скрипт. Этот скрипт необходимо настроить, т.е. указать в нём URL для скачивания базы и пути к файлам на сервере. После этого загрузить его на сервер и настроить его запуск по расписанию с помощью cron.

Определение страны и города по ip через сервис через сервис ipstack

Рассмотрим ещё один вариант определения в php местоположения по ip посетителя, но уже не через Sypex Geo, а с помощью сервиса ipstack.

Сервис ipstack имеет бесплатный план, который позволяет обрабатывать до 10000 запросов в месяц.

Планы сервиса ipstack для определения страны и города посетителя по его ip

Для получения бесплатного плана нажимаем на кнопку «GET FREE API KEY» и переходим на страницу, на которой нужно заполнить регистрационную карточку.

После регистрации, на личной странице ipstack вам будет назначен «API Access Key», который нужно скопировать. Он нам потребуется при создании php скрипта.

Как в PHP получить IP адрес сервера

Узнать IP адрес сервера в PHP можно с помощью следующей инструкции:

Пример реализации определения локации в CMS MODX

В качестве примере рассмотрим, как в CMS MODX Revolution можно очень просто без сторонних сервисов осуществить определение страны посетителя. Разработаем решение на базе Sypex Geo.

1. Для этого сначала нужно загрузить Sypex Geo в проект:

Загрузка библиотеки Sypex Geo в проект на CMS MODX Revolution с помощью которой организуем определение страны посетителя по его ip

Файл «SxGeo.php» – это основной скрипт, а «SxGeo.dat» – это база стран. Этих двух файлов достаточно для определения страны пользователя по его ip. Дополнительно в каталоге SxGeo ещё расположен файл «SxGeoCity.dat», данный файл в текущей реализации не нужен, он может потребовать, если в проекте потребуется определять не только страну пользователя, а ещё его регион и город.

2. Создадим сниппет, например «get_location.php». В качестве примера организуем это с помощью файлов. Для этого нужно чтобы был установлен pdoTools и в настройках включена опция «Использовать Fenom на страницах».

Код сниппета «get_location.php»:

Поместим файл «get_location.php» в каталог /core/elements/snippets/ .

Данный сниппет будет определять страну и помещать его код в плейсхолдер countrycode .

3. После этого в нужных шаблонах поместим код вызова сниппета и сохранение значение плейсхолдера countrycode в переменную $country_code .

Оценить 1 комментарий

Winsik

hummingbird

hummingbird

KRHD: Антон: да знаю я про explode, приведённая выше функция называется GetIP и логично что она должна вернуть ip, а не строку с кучей ip

hummingbird

Андрей Буров: ну вот че ты, че ты докапываешься? Вот скажи мне, твоя жизнь настолько скучна, что ты тратишь свое время на подобные вещи? Уже даже автор вопроса разъясняет тебе, что есть explode. Все. Угомонись, пожалуйста. Я мог функцию назвать как угодно. Я не в даюсь в такие вещи, когда что-то пишу тут по фасту.

Антон, Антон, вы аферист, название гетайпи не соответствует возвращению набору из айпи, вводите тут людей в заблуждение, не надо так, мы за вами будем следить!

Winsik

Winsik

KRHD: remot_addr возвращает ip хоста создавшего соединение, если вы работаете через прокси, то возможно сервис 2ip определяет ip-шник за проксёй

KRHD: IP посетителя - это именно REMOTE_ADDR.
Если вам для чего-то (например, логов) понадобилось ещё что-то, что можно узнать о клиенте - пишите всё, что найдёте. Например, весь $_SERVER.

Melkij: далеко не всегда. Например, если статику отдаёт nginx, а динамику он проксирует к apache, то в REMOTE_ADDR будет 127.0.0.1.

Алексей Уколов: это значит "настройте нормально свой веб-сервер". Для апача, емнип, rpaf

php-uznat-ip-adres

Доброго времени суток 🙂

На практике часто возникает необходимость узнать IP в PHP скрипте сайта. Причём, это может быть как IP адрес сервера, так и посетителя, производящего действия на вашем ресурсе.

Причём, последний иногда может пользоваться сайтом не напрямую, а по каким-то причинам подключаясь к нему через прокси сервер. Этот случай усложняет жизнь тем, что для подключения используется изменённый IP адрес.

Нам осталось только пользоваться 🙂

Как в PHP узнать IP сервера

Вся необходимая информация об IP сервера, да и пользователя тоже, в PHP доступна через суперглобальный массив $_SERVER. Однако, помимо перечисленных данных он содержит ещё много различной информации.

В этой ситуации отыскать нужное становится непростой задачей, для решения которой нужно знать назначение переменных массива.

В частности, для того, чтобы в PHP определить IP адрес сервера, в коде нужно прописать следующую конструкцию:

Данный PHP код позволит вам вывести на экран IP адрес сервера, на котором он запускается. Это же значение будет и IP адресом сайта, если он вам где-нибудь понадобится.

Как в PHP получить IP посетителя

Для определения в PHP IP пользователя, с которого он подключается к вашему сайту, мы воспользуемся тем же массивом $_SERVER. В данном случае нас будет интересовать переменная REMOTE_ADDR, содержимое которой можно вывести на экран привычным способом:

Однако, в случаях использования клиентом прокси соединений, т.е. когда при подключении трафик идёт через сторонний прокси сервер, данная переменная будет содержать IP адрес не посетителя, а прокси сервера.

Чтобы узнать в PHP IP адрес посетителя в данном случае, нужно воспользоваться другим способом.

Как в PHP определить IP пользователя, использующего прокси

Первым делом, в PHP IP посетителя при использовании прокси можно попробовать получить следующим способом:

Данный код можно найти практически во всех PHP скриптах, определяющих реальный IP посетителя. Однако, мало кто может объяснить, что хранится в данной переменной.

И, самое главное, что на это значение не влияет прокси соединение, т.е. здесь вы найдёте реальный IP пользователя, а не его прокси сервера.

Если по каким-то причинам данная переменная будет отсутствовать в PHP $_SERVER, то можете попробовать узнать IP адрес клиента ещё и таким способом:

В данную переменную прокси сервера сами помещают реальный IP посетителя.

Таким образом, для того, чтобы в PHP узнать IP клиента гарантированно, можно использовать следующую конструкцию:

Данный скрипт выведет на экран значение переменной $ip, в которую при использовании прокси соединения будет записан глобальный IP посетителя. Если же его не будет найдено в PHP $_SERVER, то скрипт попытается узнать IP пользователя, записанный самим прокси сервером.

Если же ни одной переменной не будет присвоено значение, то с большой вероятностью можно предположить, что посетитель не использует прокси либо прокси сервер не предоставляет реальный IP посетителя. В этом случае, чтобы получить хоть какое-то значение IP, мы берём его из REMOTE_ADDR. Но, с высокой долей вероятности, это значение будет IP адресом прокси сервера (благо, что ими не пользуется абсолютно каждый клиент сайтов).

Для проверки существования значений переменных я, как видите, решил воспользоваться PHP функцией filter_var, которая фильтрует переменные с применением определённого фильтра (шаблона), которым в данном случае является FILTER_VALIDATE_IP.

В завершение хочу подытожить, что описанным выше способом, несмотря на все тщательные проверки всех возможных серверных переменных PHP, определить IP пользователя с использованием прокси всё равно не получится на 100%.

Если же ваш пользователь решил скрыть свой реальный IP с помощью коммерческого непрозрачного прокси, то шансы узнать его реальный адрес стремятся к нулю. Благо, что процент таковых клиентов совсем невелик, так что приведённая финальная версия скрипта поможет вам в большинстве случаев.

IP адрес

Сегодня поговорим о том, как определить IP адрес пользователя в PHP, как его проверить с помощью регулярных выражений, как его конвертировать в число и обратно, как его хранить в базе данных MySQL, а так же о том, какие ip адреса заранее зарезервированы..

Вступление

IP адрес - это сокращение от Internet Protocol Address. Это числовой идентификатор компьютера или устройства в локальной сети или сети интернет. Бывают двух версий:

В этой статье мы поговорим про ip-адреса версии IPv4, т.е. об ip адресах из диапазона: 0.0.0.0 - 255.255.255.255

Как получить IP адрес посетителя в PHP

IP адрес пользователя, в PHP, передается в глобальном массиве $_SERVER. Получить его можно использовав ключ массива REMOTE_ADDR, пример:

В результате выполнения скрипта, вы получите ip адрес посетителя.

Какой адрес будет показан при входе с моего ПК, на веб-сервер на моем ПК?

В случае, если Вы установили веб-сервер на свой ПК (например, Openserver) и открываете страницу опять же со своего ПК, вы увидите адрес 127.0.0.1. Это нормально, при переносе на нормальный хостинг, будет показан Ваш внешний IP.

Что будет при попытке получить ip-адрес выполнив скрипт из консоли?

Если Вы попробуете запустить такой скрипт из консоли, например создав файл ip.php с содержимым:

и затем в консоли выполните:

то вы получите ошибку, в которой будет написано, что PHP не может найти значение по указанному ключу

Notice : Undefined index : REMOTE_ADDR in ip . php on line 3

Дело в том, что эти переменные устанавливает веб-сервер и при запуске "напрямую" они не будут установлены

Как проверить откуда запускается скрипт из консоли или через веб-сервер?

Проверить откуда запускается скрипт можно с помощью функции php_sapi_name()

Более надежными способом будет дополнительная проверка на существование ключа массива, вот так:

if ( ( php_sapi_name ( ) ! = 'cli' ) && isset($SERVER['REMOTE_ADDR'])) <

Если у Вас возникнет вопрос, почему просто не проверить через isset, отвечаю: переменная REMOTE_ADDR может быть установлена с помощью переменных окружения, тогда проверка isset пройдет, но значение может не соответствовать действительности. Да, можно проигнорировать проверку с помощью php_sapi_name(), но вы должны отдавать себе отчет в том, что вы делаете и почему именно так.

Как проверить IP адрес с помощью регулярного выражения?

Проверить IP адрес с помощью регулярного выражения можно простой проверкой:

Здесь проверяется, что в $ip содержится такая строка:

( 1 - 3 цифры от 0 до 9 ) точка ( 1 - 3 цифры от 0 до 9 ) точка ( 1 - 3 цифры от 0 до 9 ) точка ( 1 - 3 цифры от 0 до 9 )

Более точной будет проверка ip-адреса вот таким выражением:

Здесь проверяется, что в $ip содержится такая строка:

( цифра от 0 до 255 ) точка ( цифра от 0 до 255 ) точка ( цифра от 0 до 255 ) точка ( цифра от 0 до 255 )

Как определить IP адрес посетителя, находящегося за прокси сервером?

Обычно используют так:

В случае, если Вы решите использовать именно такой код, я рекомендую проверять его с помощью регулярки описанной выше, чтобы отфильтровать не валидные ip и гадости. Вот так:

Как хранить IP адрес в базе данных MySQL?

Лично я предпочитаю хранить IP адрес в MySQL в поле типа VARCHAR(15), по длине самого длинного IPv4 адреса = 255.255.255.255

Другой способ, это привести IP адрес в к типу UNSIGNED INT. Это позволяет экономить память: 4 байта у UNSIGNED INT против 15 у CHAR.

Преобразовать IPv4 адрес к типу INT в PHP можно так

Тоже самое можно сделать и на стороне MySQL, для этого надо использовать функции INET_ATON() и INET_NTOA()

Запомнить эти функции достаточно просто:
ATON = Address TO Numaber
NTOA = Number TO Adress

Выбор, что использовать для хранения VARCHAR или INT стоит за проектировщиком БД и удобством использования в будущем.

Какие IP адреса являются предопределенными?

Для локальных сетей предопределены такие диапазоны IP адресов:

  • 10.0.0.0/8 или 10.0.0.0 - 10.255.255.255
  • 172.16.0.0/12 или 172.16.0.0 - 172.31.255.255
  • 192.168.0.0/16 или 192.168.0.0 - 192.168.255.255

Для коммуникаций внутри хоста (между программами запущенными на вашем ПК) используется диапазон ip-адресов: 127.0.0.0/8 или 127.0.0.0 - 127.255.255.255 .

Блок с 169.254.1.0 по 169.254.254.255 (подсеть 169.254.0.0/16 за исключением подсетей 169.254.0.0/24 и 169.254.255.0/24) —
используется для автоматической настройки сетевого интерфейса в случае отсутствия DHCP

Время ролика: 19:50


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

1. Имя сервера

Создадим страницу (у меня это index.php) и напишем в нее следующий код:

2. Откуда пришел пользователь

3. Информация о клиенте


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Определение IP-адреса клиента

Данные из этой формы будут передаваться методом POST, в качестве обработчика данных мы указали файл index.php (детально обо всем этом я рассказываю в мини-курсе по созданию полноценной формы обратной связи). На странице index.php давайте будем принимать эти данные и выводить их:

Здесь мы проверили, была ли нажата кнопка формы и, если она нажата, мы выводим то, что получили в качестве имени. А ниже мы прописали ссылку на ту страницу, откуда пришли, т.е., на страницу с формой. Об условиях, глобальном массиве $_POST и прочих вещах, которые мы только что использовали, я также детально рассказывал в мини-курсе по созданию формы обратной связи. Мы все делаем максимально упрощенно, без особых проверок, поскольку целью урока является простая передача IP-адреса клиента и не больше.

Итак, имя мы получаем. Теперь осталось передать скрытно от пользователя его IP-адрес. Для этого допишем на странице с формой еще одно поле, типом которого укажем hidden (т.е., скрытое), а в качестве его значения укажем элемент REMOTE_ADDR:

< input type = "hidden" name = "ip" value = " <?php echo $_SERVER [ 'REMOTE_ADDR' ] ; ?> " / >

Интерпретатор PHP в качестве значения скрытого поля прописал IP-адрес клиента, который и будет отправлен на страницу index.php, и этот адрес будет находиться в переменной ip глобального массива $_POST. Осталось дописать вывод в файле index.php:

Вот, в принципе, и все. Вот так вот просто при помощи элементов массива $_SERVER мы можем получить массу служебной информации, которую затем можем использовать в своих веб-приложениях. Мы рассмотрели только пять элементов массива $_SERVER, на самом деле их, как уже говорилось выше, гораздо больше и без них часто сложно организовать функционирование достаточно серьезного проекта.

На этом, урок по определению IP-адреса компьютера окончен. До новых встреч!


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока


Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (81)

Посмотрите whois. Как вариант.

Ну узнаем мы к какому региону и провайдеру принадлежит ай-пишник и что дальше? Побежим в мили.. сорри полицию строчить заявление? Никто и никогда нам никаких сведений о физ лице не даст, только на смех поднимут. Наиболее разумный и действенный вариант это блокировка по ip. Это, конечно, не панацея, но на какое-то время может помочь. Собственно хотелось бы увидеть скрипт, позволяющий блокировать некоторый диапазон ip адресов.

p.s. whois показывает частенько такой бред

Да это было бы оч полезно. У джумлы стандартный модуль голосования (и сторонние расширения для комментов) все эти функции содержит. Но хотелось бы и ручками научицца. Ждем новых уроков. Спсб.

Можно блокировку сделать в файле htaccess по маске.я так целую страну отсек от своего сайта.Хотя человек может через анонимайзер зайти,может Вы что подскажите как определить что используется анонимайзер или софт по смене ip?

А что вы сразу про полицию? Она же теперь хорошая! Не то что старая милиция!
Если по существу, определить город/регион имеет смысл, например для того что бы показывать организации/фирмы только того города/региона откуда поступил запрос. Это актуально для каталогов.

Эрли, напишите в файле *.php следующее: print_r($_SERVER);
Сохраните страничку и затем обновите )) И кое ,что из, многого, Вам станет ясно в этой жизни
Успехов в учёбе .

Geotargeting прикрутить можно.
(правда ловить будет, лишь крупные населённые пункты.)

мне надо узнать с какого ip совершали записи в опред.аккаунт телеграм опред.числа

А как скрыть свой IP

Как всегда очень интересный и нужный урок.
Ребята, если, конечно можно, опубликуйте урок как скачивать файлы с сайта?
Вверху этой странички есть ссылка, по которой мы скачиваем уроки, расскажите, как мы сам можем организовать такую же.

Супер. Раньше я пользовался сторонними сервисами размещая их скрипт у себя, тем саммым засоряя лишними ссылками свой сайт, да и бывало что он был не доступен.

Здравствуйте! Хочу Вас поблагодарить за проделанную работу. Мой вопрос может показаться глупым но я по сути еще чайник. У меня тариф безлимит и это предполагает динамический AP. То-есть он дается на 3-4 дня потом другой и так далее, полчается можно вычислить только регион?

А как насчёт левых прокси. Можно вычислить адрес?

Читайте также: