Самый быстрый способ определения страны пользователя

Мне нужно определить страну пользователя и показать язык сайта. (Турецкий для турецкого народа, английский для всех остальных)

Как я могу сделать это быстрее всего? Производительность важна для меня.

Я ищу API IPInfoDB , есть ли лучшая альтернатива?

(Я использую PHP)

Вы можете использовать API здесь http://www.hostip.info/use.html, если вы в порядке, полагаясь на внешний сайт.

Вы также можете использовать API-интерфейс GeoIP PHP

Конечно, реализация скрипта, связанного с Orbit, может просто избавить вас от необходимости проходить через API.

Удачи.

Лучший способ сделать это я нашел, используя библиотеку «GAE-IP-TO-COUNTRY»: https://github.com/andris9/GAE-IP-TO-COUNTRY/tree/master/src/ip_files

Пример использования (вам нужно скопировать каталог «ip_files» на ваш сервер):

function iptocountry($ip) { $numbers = preg_split( "/\./", $ip); include("./ip_files/".$numbers[0].".php"); $code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]); foreach($ranges as $key => $value){ if($key<=$code){ if($ranges[$key][0]>=$code){$country=$ranges[$key][1];break;} } } return $country; } $country=iptocountry($_SERVER['REMOTE_ADDR']); echo $country; 

Эта ссылка должна быть очень полезной:

http://www.phptutorial.info/iptocountry/the_script.html

Вы сможете загрузить необходимые файлы и скрипты.

Как указывали другие, вероятно, лучше было бы проверить HTTP-заголовок Accept-Language для турецкого языка. Если это предпочтительный язык, подавайте его. В противном случае обслуживайте английский язык. Вот какой код .

Хорошо для людей, которые могли бы посетить в 2017 году, это решение, которое чрезвычайно просто в использовании

 <button class="btn dropdown-toggle" style="cursor:pointer;z-index:1000!important;margin-top:-67px;background:none!important;font-size:1.4em;" onclick="window.location.href='language'"> (a) <?php if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP'];} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } $url = "http://api.wipmania.com/".$ip; (h) $country = file_get_contents($url); //ISO code for Nigeria it is NG check your country ISO code ?> <?php if ($country == ""){ echo "Country not found"; } else { ?> <script> var map = "<?php echo $country ?>"; $.ajax({ type : 'POST', url : 'http://www.mowemy.com/countryflag.php', data : {map: map}, success : function(r) { //console.log("success: " + r); $('#mumil').html(r); } }) </script> <?php } ?> <div id ="mumil" style="font-size:13px!important;margin-top:5px;"></div> </button> 

позвольте мне клюнуть это письмо A – H – это сценарий для определения вашего номера ISO для страны для моей страны. Нигерия – это NG, вы можете искать в вашем регионе номер ISO, с этим сценарием он автоматически обнаруживается. Затем я создал страницу с некоторой информацией, в которой вы запускаете AJAX на эту страницу, на которую он отправляет цвет флага страны, и имя прост и понятен. ПОЖАЛУЙСТА, ЗВОНИТЕ ДЖЕРКЕ, ПЕРЕД АЙАКСОМ, ЧТОБЫ РАБОТАТЬ В AJAX, ЕСЛИ ЭТО НЕ РАБОТАЕТ ХОРОШЕЕ

Я закодировал следующий материал с помощью Accept-Language, поскольку другие пользователи указали:

 function GetAcceptedLangs() { $res=array(); $a=getallheaders(); if(isset($a["Accept-Language"])) { $aceptlangs=explode(",",str_replace(array(';','0','1','2','3','4','5','6','7','8','9','.',"q="),array(',','','','','','','','','','','','',""),$a["Accept-Language"])); foreach($aceptlangs as $i=>$v) { if(trim($v)!="") $res[]=trim($v); } } return $res; } 

Просто

 print_r(GetAcceptedLangs()); 

возвращение в моем случае:

 Array ( [0] => es-ES [1] => es [2] => en ) 

Вы можете определить массив, подобный этому, чтобы изменить его значение на внутреннем языке, например:

 $al={"ES-es"=>"es","es"=>"es","en"=>"en"......} 

Они уже отсортированы по пользовательским настройкам.

Если все языки не существуют в массиве, вы можете перейти на язык по умолчанию на своем веб-сайте. Это также верно, если браузер не отправляет заголовок Accept-Language.

Другая версия, удаляющая значения субрегиона

 function GetAcceptedLangs2() { $res=array(); $a=getallheaders(); if(isset($a["Accept-Language"])) { $aceptlangs=explode(",",str_replace(array(';','0','1','2','3','4','5','6','7','8','9','.',"q="),array(',','','','','','','','','','','','',""),$a["Accept-Language"])); foreach($aceptlangs as $i=>$v) { $va=trim($v); if(($pos=strpos($va,"-"))!==false) $l=substr($va,0,$pos); else $l=$va; if($l!="" && !isset($check[$l])) { $check[$l]=1; $res[]=$l; } } } return $res; } 

Он вернется в моем случае

 Array ( [0] => es [1] => en )