Можно ли перенаправлять пользователя на разные странички в зависимости от страны.
Например, человек заходит из России (.ru), он перенаправляется на страничку index-rus.html
Если человек заходит из Украины (.ua), ему показывается страничка index-ua.html
PHP
Как сделать редирект пользователя в зависимости от страны?
обычно по IP делают редирект - из английского сайта могут кто угодно зайти
Лучше не редиректить, а на стороне сервера показывать разные страницы
```
<?php
switch($country)
{
case 'ru': include('index-ru.html'); break;
case 'ua': include('index-ua.html'); break;
default: // ???
}
```
и т. д.
Но можно и редиректить
<?php
switch($country)
{
case 'ru': header('Location: /index-ru.html'); exit;
case 'ua': header('Location: /index-ua.html'); exit;
default: // ???
}
Код страны определяется по IP адресу с помощью библиотеки GeoIP или гео-сервисов
Если в форме нет поля для выбора страны и города, то можно вычислить приблизительное местоположение по IP адресу. Это неточная информация, ей нельзя доверять на 100%, потому что пользователь мог зайти на сайт через анонимные прокси. Желательно уточнить у него - "Вы точно из города X?".
Для автоматического вычисления гео-данных можно воспользоваться платной базой GEO данных сервиса MaxMind или платными открытыми веб-сервисами
Или бесплатными сервисами, которые возвращают данные с очень большой погрешностью, например вместо города возвращают страну :(
* ipinfo.io
* www.ipinfodb.com/ip_location_api.php
* ip-api.com
* www.ipaddresslocation.org
Пример получения информации через API MaxMind для языка PHP
```
<?php
require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;
// This creates the Reader object, which should be reused across lookups.
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
// Replace "city" with the appropriate method for your database, e.g., "country".
$record = $reader->city('128.101.101.101');
print($record->country->isoCode . "\n"); // 'US'
print($record->country->name . "\n"); // 'United States'
print($record->country->names['zh-CN'] . "\n"); // '美国'
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
print($record->city->name . "\n"); // 'Minneapolis'
print($record->postal->code . "\n"); // '55455'
print($record->location->latitude . "\n"); // 44.9733
print($record->location->longitude . "\n"); // -93.2323
```
Пример получения информации об IP адресе на языке PHP через открытый сервис ipinfo.io
```
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->city; // -> "Mountain View"
```
Пример запроса:
```
$ curl ipinfo.io/8.8.8.8
```
Пример ответа:
```
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "CA",
"country": "US",
"phone": 650
}
```
```
<?php
switch($country)
{
case 'ru': include('index-ru.html'); break;
case 'ua': include('index-ua.html'); break;
default: // ???
}
```
и т. д.
Но можно и редиректить
<?php
switch($country)
{
case 'ru': header('Location: /index-ru.html'); exit;
case 'ua': header('Location: /index-ua.html'); exit;
default: // ???
}
Код страны определяется по IP адресу с помощью библиотеки GeoIP или гео-сервисов
Если в форме нет поля для выбора страны и города, то можно вычислить приблизительное местоположение по IP адресу. Это неточная информация, ей нельзя доверять на 100%, потому что пользователь мог зайти на сайт через анонимные прокси. Желательно уточнить у него - "Вы точно из города X?".
Для автоматического вычисления гео-данных можно воспользоваться платной базой GEO данных сервиса MaxMind или платными открытыми веб-сервисами
Или бесплатными сервисами, которые возвращают данные с очень большой погрешностью, например вместо города возвращают страну :(
* ipinfo.io
* www.ipinfodb.com/ip_location_api.php
* ip-api.com
* www.ipaddresslocation.org
Пример получения информации через API MaxMind для языка PHP
```
<?php
require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;
// This creates the Reader object, which should be reused across lookups.
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
// Replace "city" with the appropriate method for your database, e.g., "country".
$record = $reader->city('128.101.101.101');
print($record->country->isoCode . "\n"); // 'US'
print($record->country->name . "\n"); // 'United States'
print($record->country->names['zh-CN'] . "\n"); // '美国'
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
print($record->city->name . "\n"); // 'Minneapolis'
print($record->postal->code . "\n"); // '55455'
print($record->location->latitude . "\n"); // 44.9733
print($record->location->longitude . "\n"); // -93.2323
```
Пример получения информации об IP адресе на языке PHP через открытый сервис ipinfo.io
```
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->city; // -> "Mountain View"
```
Пример запроса:
```
$ curl ipinfo.io/8.8.8.8
```
Пример ответа:
```
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "CA",
"country": "US",
"phone": 650
}
```
Похожие вопросы
- Нужно сделать редирект с поддомена на домен в .htaccess
- создаю редактор профиля для пользователя для сайта.. проблема..
- Как предотвратить ввод пользователем невалидных ссылок?
- При удалении сообщения одним пользователем, оно удаляется и у другого.
- Как хранить информацию о пользователях в бд?
- Как вывести имя и фамилию пользователя из куки? (PHP setcookie)
- Задача: Web-интерфейс БД зарегистрированных пользователей сайта
- Можно ли узнать, открыт ли сайт в браузере пользователя? можно ли задать событие при закрытии сайта (удаление cookies)?
- Зачем вводят законы обязывающие сайты уведомлять пользователей об использовании cookies и других персональных данных?
- Создайте простой пример для реализации MVC-архитектуры на РНР для веб-приложений, включающий список пользователей.