Php страна и город

Geo IP Location

require_once( «geoip2.phar» );
use GeoIp2 \ Database \ Reader ;
// City DB
$reader = new Reader ( ‘/path/to/GeoLite2-City.mmdb’ );
$record = $reader -> city ( $_SERVER [ ‘REMOTE_ADDR’ ]);
// or for Country DB
// $reader = new Reader(‘/path/to/GeoLite2-Country.mmdb’);
// $record = $reader->country($_SERVER[‘REMOTE_ADDR’]);
print( $record -> country -> isoCode . «\n» );
print( $record -> country -> name . «\n» );
print( $record -> country -> names [ ‘zh-CN’ ] . «\n» );
print( $record -> mostSpecificSubdivision -> name . «\n» );
print( $record -> mostSpecificSubdivision -> isoCode . «\n» );
print( $record -> city -> name . «\n» );
print( $record -> postal -> code . «\n» );
print( $record -> location -> latitude . «\n» );
print( $record -> location -> longitude . «\n» );
$>

It should be noted that this extension has now been superseded by the GeoIP2 API that MaxMind now produces. There is a pure-PHP set of classes and a C library and extension you can optionally install. The code can be found in various projects on MaxMind’s GitHub page: https://github.com/maxmind/

If you want to use the C Library
Example for Ubuntu and PHP 7.4

sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin
pecl install maxminddb
vi /etc/php/7.4/mods-available/maxmind.ini
add
extension=maxminddb.so
phpenmod maxmind

$ipAddress = ‘24.24.24.24’ ;
$databaseFile = ‘/usr/share/GeoIP/GeoLite2-Country.mmdb’ ;

$reader = new Reader ( $databaseFile );

// get returns just the record for the IP address
print_r ( $reader -> get ( $ipAddress ));

// getWithPrefixLen returns an array containing the record and the
// associated prefix length for that record.
print_r ( $reader -> getWithPrefixLen ( $ipAddress ));

The 3rd party geolite2legacy script can also used to convert the newer GeoLite2 format downloads into the legacy format which can be read by the PHP GeoIP extension.

Источник

Выбор страна → регион → город

Имеются три селекта: страна → регион → город. При выборе страны подгружается список регионов, при выборе региона подгружается список городов, а при выборе города нужно делать переход на страницу index.php?country=RU&region=2&city=3 то есть те значения, что были выбраны в трёх селектах, по ним нужно сделать переход на страницу.

 $res = mysqli_query($link, 'SELECT * FROM '.db_prefix.'country'); ?> 
"; if(isset($_POST['country'])) < $res=mysqli_query($link, 'SELECT * FROM '.db_prefix.'area WHERE country="'.mysql_real_escape_string($_POST['country']).'"'); if(mysqli_num_rows($res))< echo ""; >else < // выбираю города без учета региона $res=mysqli_query($link, 'SELECT * FROM '.db_prefix.'city WHERE country='.mysql_real_escape_string($_POST['country'])); echo ""; > > $region = isset($_POST['region'])?$_POST['region']:NULL; if($region && $region !== 0) < $res=mysqli_query($link, 'SELECT * FROM '.db_prefix.'city WHERE area='.(int)$_POST['region']); echo ""; > ?>
Хочу в ".$row['name']."!"; > ?>

Источник

Читайте также:  Javascript get all element in form

Как в 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:

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, распаковать его и загрузить на сервер.

Читайте также:  Check your java plugin

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

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.

Читайте также:  Android закрытие приложений java

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}

Источник

geoip_country_code_by_name

Функция geoip_country_code_by_name() возвращает двухсимвольный код страны, соответствующий имени хоста или IP-адресу.

Список параметров

Имя хоста или IP-адрес, по которому будет вестись поиск.

Возвращаемые значения

Возвращает два символа, содержащих код страны по ISO 3166-1, при нахождении адреса в базе данных, в противном случае false .

Примеры

Пример #1 Пример использования geoip_country_code_by_name()

Данный пример выведет расположение хоста example.com.

$country = geoip_country_code_by_name ( ‘www.example.com’ );
if ( $country ) echo ‘Хост расположен в ‘ . $country ;
>
?>

Результат выполнения данного примера:

Примечания

Пожалуйста, ознакомьтесь с полным списком допустимых возвращаемых значений, в том числе и специальных кодов, здесь » http://www.maxmind.com/en/iso3166.

Смотрите также

User Contributed Notes 2 notes

Latest version v1.1.1 https://pecl.php.net/package-changelog.php?package=geoip&release=1.1.1 support IPv6 four country database. New functions geoip_country_code_by_name_v6(), geoip_country_code3_by_name_v6() and geoip_country_name_by_name_v6() are not mentioned in doc at all.

The doc example gets the country of the website.
However, to get the country of your website’s «visitor/user»,
use the «user’s» IP address as parameter:

$country = geoip_country_code_by_name ( $_SERVER [ ‘REMOTE_ADDR’ ]);
?>

  • Функции GeoIP
    • geoip_​asnum_​by_​name
    • geoip_​continent_​code_​by_​name
    • geoip_​country_​code_​by_​name
    • geoip_​country_​code3_​by_​name
    • geoip_​country_​name_​by_​name
    • geoip_​database_​info
    • geoip_​db_​avail
    • geoip_​db_​filename
    • geoip_​db_​get_​all_​info
    • geoip_​domain_​by_​name
    • geoip_​id_​by_​name
    • geoip_​isp_​by_​name
    • geoip_​netspeedcell_​by_​name
    • geoip_​org_​by_​name
    • geoip_​record_​by_​name
    • geoip_​region_​by_​name
    • geoip_​region_​name_​by_​code
    • geoip_​setup_​custom_​directory
    • geoip_​time_​zone_​by_​country_​and_​region

    Источник

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