Php get request ip address

How to get user IP address, OS, browser and country in PHP

As a developer, you may want to collect your website users’ information such as their IP addresses, their operating system, the browser, and the country from which they are accessing the site.

You may do this to track user activities for security reasons or for a better user experience in order to serve users with content that is more personalized content for their region/country.

How to collect user IP address

It is very easy to get user IP address in PHP using the superglobal variable $_SERVER which provides the server and environment-related information.

Below are the following ways in which you can collect the IP using the $_SERVER variable:

1. $_SERVER[‘REMOTE_ADDR’] — This contains the real IP address of the client. That is the most reliable value you can find from the user.

2. $_SERVER[‘HTTP_CLIENT_IP’] — This will fetch the IP address when the user is from shared Internet services.

3. $_SERVER[‘HTTP_X_FORWARDED_FOR’] — This will fetch the IP address from the user when he/she is behind the proxy.

The simplest way is just to collect the REMOTE_ADDR as below:

However, the user can be behind a proxy server in which case the proxy may have set the $_SERVER[‘HTTP_X_FORWARDED_FOR’] and in this case, the $_SERVER[‘REMOTE_ADDR’] fails to return the correct IP address of the user.

Use the sample code below to get the more accurate one:

 else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) < $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; >else < $ip = $_SERVER['REMOTE_ADDR']; >echo "IP address is: ".$ip; 

How to get user OS and browser

You also correct the client information in PHP through the use of the variable $_SERVER.

Simply use the code below:

The above code should give the result as below:

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0

Читайте также:  Java spring data specification

If you just want to simply collect the OS name and the browser name and version, simply do this:

"; echo "Browser: ".end(explode(" ",$client)); 

It should give you the result as below depending on your OS and browser:

Operating system: Ubuntu
Browser: Firefox/91.0

How to get user country

It is possible to get the country information of the website user, using their IP address with the help of the geoplugin.net API.

Simply get the PHP curl GET request as below:

This request will give you a JSON response as below:

You can extract the JSON data to PHP variables for user as shown below:

geoplugin_continentName."
"; echo "Country Name: ".$params->geoplugin_countryName."
"; echo "Country Code: ".$params->geoplugin_countryCode."
"; echo "City Name: ".$params->geoplugin_city;

The above code should print out the result as shown below:

Continent Name: Africa
Country Name: Kenya
Country Code: KE
City Name: Nairobi

Conclusion

It is possible to collect important user information on your website for specific reasons such as tracking and security reasons, customizing the site content based on their region, web browser, etc.

In this article, we have covered how you can collect user IP address, web browser, operating system, and the country they are from using PHP. It’s my hope that the article has answered your question or it has been useful to you.

Источник

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

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

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

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

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

В этом случае, чтобы узнать 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:

Читайте также:  Python экранирование пути файла

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 запросов в месяц.

Планы сервиса 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.

Читайте также:  Encode string to html php

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}

Источник

How to Get IP Address of User in PHP

Many times we need to collect the visitor IP address to track activity and for security reasons. It’s very easy to get the IP address of visitors in PHP. PHP $_SERVER variable provides an easy way to get user IP address. The $_SERVER contains an array that provides the server and environment-related information in PHP.

The simplest way to get the visitor IP address is using the REMOTE_ADDR indices in PHP $_SERVER method.

echo 'User IP - '.$_SERVER['REMOTE_ADDR'];

But sometimes REMOTE_ADDR does not return the correct IP address of the user. The reason behind this is to use a Proxy. In that situation, use the following code to get real IP address of user in PHP.

function getUserIpAddr() if(!empty($_SERVER['HTTP_CLIENT_IP'])) //ip from share internet 
$ip = $_SERVER['HTTP_CLIENT_IP'];
>elseif(!empty(
$_SERVER['HTTP_X_FORWARDED_FOR'])) //ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
>else
$ip = $_SERVER['REMOTE_ADDR'];
>
return
$ip;
>

echo
'User Real IP - '.getUserIpAddr();

Источник

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