Php узнать ip adres

How to Get Local IP Address of System using PHP ?

IP (Internet Protocol) Address is an address of your network hardware. It helps in connecting your computer to other devices on your network and all over the world. An IP Address is made up of numbers or characters combined by ‘.’ symbol.

Example: It is an example of IP address.

All devices that are connected to an internet connection have a unique IP address which literally gives the idea that a large number of IP addresses had to be created for every system.

Local IP address: It is the IP address of your computer system which is meant to be kept private and thus is also known as private IP addresses. This article focuses on how to extract the IP address. A private IP address is the address of your device connected to the home or business network. If you have a few different devices connected to one ISP (Internet Service Provider), then all your devices will have a unique private IP address. This IP address cannot be accessed from devices outside your home or business network. Private IP addresses are not unique because there is a limited number of devices on your network. There are some other types of IP addresses that exist like, public IP addresses, static IP addresses and dynamic IP addresses that follow the same format for representation.

IPv4 address: The IPv4 version used to configure IP addresses in numerical value and it uses the hexadecimal number system to complete its job i.e. what makes it possible to get millions of IP, different for every system.

Example: In this example, we are trying to get the local IP address without using terminal and its commands. Instead, we are using a PHP program to get the same job done. We will be required two methods that are mentioned below:

  • getHostByName() Function: It gets the IPv4 address corresponding to a given Internet host name.
  • getHostName() Function: It gets the standard host name for the local machine.

Источник

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

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

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

// сохраним в переменную ip значение IP адреса клиента $ip = $_SERVER['REMOTE_ADDR'];

Но, если клиент использует прокси-сервер, то значение $_SERVER[‘REMOTE_ADDR’] будет содержать IP последнего прокси-сервера, через который клиент попал на сайт.

Читайте также:  Testing java is working

В этом случае, чтобы узнать IP посетителя можно попробовать использовать $_SERVER[‘HTTP_CLIENT_IP’] и $_SERVER[‘HTTP_X_FORWARDED_FOR’] . HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR – это заголовки, содержащие IP адрес пользователя. Данные заголовки устанавливает прокси-сервер. Обычно прокси-сервер устанавливает один из них. Данным в этих заголовках можно доверять, только если прокси-сервер надёжный. В противном случае, им доверять не стоит, т.к. их можно очень просто подделать. В этом случае лучше просто использовать $_SERVER[‘REMOTE_ADDR’] или сохранять в базу как $_SERVER[‘REMOTE_ADDR’] , так и заголовок, устанавливаемый прокси-сервером.

function getIp() { $keys = [ 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR' ]; foreach ($keys as $key) { if (!empty($_SERVER[$key])) { $ip = trim(end(explode(',', $_SERVER[$key]))); if (filter_var($ip, FILTER_VALIDATE_IP)) { return $ip; } } } } $ip = getIp(); // выведем IP клиента на экран echo 'ip = ' . $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 посетителя к той или иной стране.

require_once 'SxGeo/get_country_code.php'; if ($country_сode === 'RU') { // код для посетителей из России. } else { // код для посетителей из других стран. }

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

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

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

get($ip); // также можно использовать следующий код // $SxGeo->getCity($ip); // широта $lat = $city['city']['lat']; // долгота $lon = $city['city']['lon']; // название города на русском языке $city_name_ru = $city['city']['name_ru']; // название города на английском языке $city_name_en = $city['city']['name_en']; // ISO-код страны $country_code = $city['country']['iso']; // для получения информации более полной информации (включая регион) можно осуществить через метод getCityFull $city = $SxGeo->getCityFull($ip); // название региона на русском языке $region_name_ru = $city['region']['name_ru']; // название региона на английском языке $region_name_en = $city['city']['name_en']; // ISO-код региона $region_name_iso = $city['city']['iso'];

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

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

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

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

Читайте также:  Java library path at runtime

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

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

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

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

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

// сохраним IP адрес сервера в переменную $ip_server $ip_server = $_SERVER['SERVER_ADDR']; // выведем IP адрес сервера на экран $echo $ip_server;

Пример реализации определения локации в 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»:

getCountry($ip); unset($SxGeo); $modx->setPlaceholder('countrycode', $country); return;

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

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

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

{$_modx->runSnippet('@FILE snippets/get_location.php')} {set $country_code = $_modx->getPlaceholder('countrycode')}

Всё теперь чтобы написать логику достаточно использовать эту переменную.

{if $country_code === 'UA'} Код для Украины {else} Код для других стран {/if}

Источник

PHP: Как определить 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 с содержимым:

Читайте также:  Python пример использования классов

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

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

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

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

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

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

Если у Вас возникнет вопрос, почему просто не проверить через 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 адрес посетителя, находящегося за прокси сервером?

Достоверно на 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 адресов:

  • 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

Источник

Оцените статью