узнать свой ip php
Как в PHP узнать IP пользователя и определить его страну?
В этой статье рассмотрим, как в PHP можно узнать IP клиента и сервера, а также разберём как зная IP клиента определить его страну и город.
Как в PHP получить IP адрес посетителя сайта
Определение страны по 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 запросов в месяц.
Для получения бесплатного плана нажимаем на кнопку «GET FREE API KEY» и переходим на страницу, на которой нужно заполнить регистрационную карточку.
После регистрации, на личной странице ipstack вам будет назначен «API Access Key», который нужно скопировать. Он нам потребуется при создании php скрипта.
Как в PHP получить IP адрес сервера
Узнать IP адрес сервера в PHP можно с помощью следующей инструкции:
Пример реализации определения локации в CMS MODX
В качестве примере рассмотрим, как в CMS MODX Revolution можно очень просто без сторонних сервисов осуществить определение страны посетителя. Разработаем решение на базе Sypex Geo.
1. Для этого сначала нужно загрузить Sypex Geo в проект:
Файл «SxGeo.php» – это основной скрипт, а «SxGeo.dat» – это база стран. Этих двух файлов достаточно для определения страны пользователя по его ip. Дополнительно в каталоге SxGeo ещё расположен файл «SxGeoCity.dat», данный файл в текущей реализации не нужен, он может потребовать, если в проекте потребуется определять не только страну пользователя, а ещё его регион и город.
2. Создадим сниппет, например «get_location.php». В качестве примера организуем это с помощью файлов. Для этого нужно чтобы был установлен pdoTools и в настройках включена опция «Использовать Fenom на страницах».
Код сниппета «get_location.php»:
Всё теперь чтобы написать логику достаточно использовать эту переменную.
Как узнать IP-адрес посетителя через PHP
Чтобы узнать IP-адрес посетителя сайта нужно написать всего лишь одну строку в скрипте:
Если Вы запустите этот скрипт, то узнаете свой IP-адрес. Как видите, всё просто! А в одной из следующих статей я расскажу, как узнать по IP-адресу, из какой страны пришёл человек на сайт.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 10 ):
Вопрос в следующем как мне заблокировать на сайте одного плохого человека я решил сделать функцию которая будет блокировать человека с конкретным ip. Получилось но у него ip динамический и постоянно изменяется Ка быть? Есть предположения?
Спасибо хорошая идея Попробую может что-то выйдет
а на настояшем сервере будет выводится IP.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
PHP определение IP или откуда родом ваши пользователи
Дата публикации: 2016-12-14
От автора: в интернете ваше имя и фамилия ничего не значат. Здесь для определения юзера используется IP. Зная его, можно установить город и страну проживания человека, используемый браузер…. Не верите? Все это вы поймете, когда изучите в PHP определение IP.
IP и не только
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Понятно, что искать конкретное значение в этом «великолепии» практически нереально, поэтому определение IP адреса PHP мы зададим более точно:
Теперь мы знаем, что IP записывается в REMOTE_ADDR. Откуда она берется? Все эти данные клиент пересылает во время установки соединения. Эта переменная задается в настройках сервера на стороне клиента.
Что касается браузера пользователя, то его можно попробовать определить с помощью функции get_browser (). Но для ее применения на стороне клиента в файле php.ini должен быть прописан путь к browscap.ini. Иначе получите подобное предупреждение:
Узнаем страну юзера и не только
Можно использовать уже готовые библиотеки, в которых полученный IP просто сортируется в зависимости от своего значения. Надеюсь, для вас не является секретом, что это значение присваивается клиенту (хосту) в зависимости от его геолокации: страны, города и региона проживания пользователя. На анализе этих диапазонов и построен весь функционал.
Также применяются различные сторонние сервисы наподобие ip-whois.net. С помощью скрипта вы передаете значение IP, а тот возвращает вам данные о нахождении хоста.
Кроме этого часть специализированных библиотек поставляется со своей базой данной, в таблицах которых содержатся все рассортированные (по географии) диапазоны IP. Я не буду их перечислять. Таких в Сети сейчас хватает.
Каким вариантом воспользоваться, решать вам. Применение стороннего сервиса позволит снизить затраты ресурсов и нагрузку на ваш сайт. При этом использование библиотеки с базой избавит от проблем с подключением.
PHP: Как определить IP адрес пользователя?
Сегодня поговорим о том, как определить IP адрес пользователя в PHP, как его проверить с помощью регулярных выражений, как его конвертировать в число и обратно, как его хранить в базе данных MySQL, а так же о том, какие ip адреса заранее зарезервированы..
Вступление
Как получить IP адрес посетителя в PHP
В результате выполнения скрипта, вы получите ip адрес посетителя.
Какой адрес будет показан при входе с моего ПК, на веб-сервер на моем ПК?
В случае, если Вы установили веб-сервер на свой ПК (например, Openserver) и открываете страницу опять же со своего ПК, вы увидите адрес 127.0.0.1. Это нормально, при переносе на нормальный хостинг, будет показан Ваш внешний IP.
Что будет при попытке получить ip-адрес выполнив скрипт из консоли?
Если Вы попробуете запустить такой скрипт из консоли, например создав файл ip.php с содержимым:
и затем в консоли выполните:
то вы получите ошибку, в которой будет написано, что PHP не может найти значение по указанному ключу
Дело в том, что эти переменные устанавливает веб-сервер и при запуске «напрямую» они не будут установлены
Как проверить откуда запускается скрипт из консоли или через веб-сервер?
Проверить откуда запускается скрипт можно с помощью функции php_sapi_name()
Более надежными способом будет дополнительная проверка на существование ключа массива, вот так:
Если у Вас возникнет вопрос, почему просто не проверить через isset, отвечаю: переменная REMOTE_ADDR может быть установлена с помощью переменных окружения, тогда проверка isset пройдет, но значение может не соответствовать действительности. Да, можно проигнорировать проверку с помощью php_sapi_name(), но вы должны отдавать себе отчет в том, что вы делаете и почему именно так.
Как проверить IP адрес с помощью регулярного выражения?
Проверить IP адрес с помощью регулярного выражения можно простой проверкой:
Более точной будет проверка ip-адреса вот таким выражением:
Как определить IP адрес посетителя, находящегося за прокси сервером?
Достоверно на 100% определить нельзя. Можно попытать удачи с переменными HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR, но надо помнить что все переменные массива $_SERVER начинающиеся на HTTP_* это заголовки запроса, которые могут быть подделаны, переопределены, полностью отсутствовать, иметь не верный формат или содержать какую-нибудь гадость, например, sql-инъекцию.
Обычно используют так:
В случае, если Вы решите использовать именно такой код, я рекомендую проверять его с помощью регулярки описанной выше, чтобы отфильтровать не валидные 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 адресов:
Блок с 169.254.1.0 по 169.254.254.255 (подсеть 169.254.0.0/16 за исключением подсетей 169.254.0.0/24 и 169.254.255.0/24) —
используется для автоматической настройки сетевого интерфейса в случае отсутствия DHCP
Сетевые функции
Содержание
User Contributed Notes 14 notes
A simple and very fast function to check against CIDR.
Your previous examples are too complicated and involves a lot of functions call.
An improved version of claudiu at cnixs dot com not using split and working with the following:
ip: 192.168.101.123, CIRD: 192.168.101.144/24
improved version of philippe-at-cyberabuse.org’s answer:
PHP miss CIDR functions.
This little function might come in handy
In Trevor Hemsley’s translation of the perl range2cidr function, the
condition should be
otherwise it won’t work for /32s, ie if you feed range2cidr(«1.2.3.4», «1.2.3.4»).
function cidr_conv($cidr_address) <
$first = substr($cidr_address, 0, strpos($cidr_address, «/»));
$netmask = substr(strstr($cidr_address, «/»), 1);
$first_bin = str_pad(decbin(ip2long($first)), 32, «0», STR_PAD_LEFT);
$netmask_bin = str_pad(str_repeat(«1», (integer)$netmask), 32, «0», STR_PAD_RIGHT);
Regarding samuele’s note:
You can get faster code if you apply directly what happens in network devices, such as routers. If you AND (logic operation) the remote ip against the local netmask the result will be the network ip if the remote ip is from the local network. Example:
192.168.0.16 = 11000000.10101000.00000000.00010000
& 255.255.255.0 = 11111111.11111111.11111111.00000000
—————————————————————
192.168.0.0 = 11000000.10101000.00000000.00000000
And now the code. My example uses a html form where you place the values you want to test:
When I was working on a project I ran into this problem with redirecting. My solution is as follows:
header(«Refresh: 5; url=../main/main.php?».session_id().»»);
This allowed me to pass the session_id() which is used throughout site to make sure user has loged in.
I hope this helps!
If you want to get the interface of an IP, based on the local route table, use this.