Загрузите и установите База данных Maxmind GeoLite Country , которая обеспечивает точность 99,5%. Вы можете заплатить за обновление до платной версии с заявленной точностью 99,8%. Существует четыре варианта использования базы данных из PHP:
- Загрузите файл CSV и импортируйте его в базу данных SQL по вашему выбору. Это самый медленный вариант с ужасным API. Я не рекомендовал бы это, но это включено для полноты.
- Загрузите чистый класс PHP, который может читать файл базы данных. Это обеспечивает хороший API, чем опция SQL, но все еще немного медленный. Существуют версии для PHP4 и PHP5
- Загрузите и установите модуль расширения C для PHP . Это имеет то преимущество, что имеет хороший интерфейс и хорошую производительность. Однако его сложнее установить, чем класс чистого PHP, поэтому вам, возможно, придется обратиться к вашей хостинговой компании. Если вам повезет, возможно, он уже установлен.
- Если вам нужна невероятно высокая производительность, используйте модуль Apache . Это самый сложный в установке, но и самый быстрый вариант.
У всех этих опций есть метод для получения кода страны. Я не буду включать параметр SQL, но вы можете получить дополнительную информацию здесь .
Чистый PHP4:
include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
$code = geoip_country_code_by_addr($gi, "24.24.24.24");
PECL PHP расширение:
$code = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
Модуль Apache:
$code = apache_note("GEOIP_COUNTRY_CODE");
Затем вы можете перенаправить на основе этих кодов, используя перенаправление HTTP:
$redirect = array("AU" => "http://australia.example.com", "NZ" => "http://newzealand.example.com")
$url = $redirect[$code]
header("Location: $url");
Однако это вызывает два HTTP-запроса и поэтому является неоптимальным. Лучше всего использовать модуль Apache для перезаписи в файле .htaccess
:
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA
RewriteRule ^(.*)$ http://www.canada.com$1 [L]
# Redirect multiple countries to a single page
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [L]
Конечно, возможно, лучший способ сделать это - заставить кого-то сделать это за вас, на уровне DNS. Быстрый поиск показал эту компанию , (я понятия не имею, хороши они или нет), без сомнения, есть и другие. Вот как это делает Google.