2015-09-07 4 views
3

Я работаю над реализацией функции geoIP, чтобы перенаправить пользователя с моего сайта .com в соответствующий домен страны (.fr, .es, .co.uk ... и т. Д.).Функция GeoIP возвращает 0

Я следующий в моем index.php, чтобы проверить пользователей IP:

ini_set('display_errors', 1); 
require_once("geoip.inc"); 
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD); 
$country_code = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']); 
geoip_close($gi); 

if($country_code == 'ES') 
{ 
     header('Location: https://www.testsite.es'); 
} 
elseif($country_code == 'GB') 
{ 
     header('Location: https://www.testsite.co.uk'); 
} 
elseif($country_code == 'FR') 
{ 
     header('Location: https://www.testsite.fr'); 
} 
else { 
     header('Location: https://www.testsite.com/home'); 
} 

Когда я проверяю переменную $country_code это пустая строка, и в результате выше терпит неудачу, и я всегда ударил https://www.testsite.com/home .. .

Я начал копаться в коде и заметил, что первый я называю этот метод:

function geoip_country_code_by_addr($gi, $addr) { 

    if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) { 
     $record = geoip_record_by_addr($gi, $addr); 
     if ($record !== false) { 
      return $record->country_code; 
     } 
    } else { 
     $country_id = geoip_country_id_by_addr($gi, $addr); 

     if ($country_id !== false) { 
      return $gi->GEOIP_COUNTRY_CODES[$country_id]; 
     } 
    } 
    return false; 
} 

который кал ls:

function geoip_country_id_by_addr($gi, $addr) { 
    $ipnum = ip2long($addr); 
    return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN; 
} 

Я не могу понять, почему он продолжает терпеть неудачу и возвращает «0»? Я использую Maxminds geoip.inc php для проверки кода страны.

Я проверил, что в моем файле php.ini включен mbstring. По какой-то причине он просто не находит код страны на основе IP-адреса, который я передаю ему. Кто-нибудь может помочь с точки зрения того, что может быть причиной этого?

+0

Не каждый IP-адрес связан с местоположением (а местоположение, возвращаемое какой-либо службой геоинформации, в лучшем случае представляет собой образованную догадку). Это происходит со всеми адресами, которые вы проходите? – Piskvor

+0

Да, каждый из них, я даже пытался использовать свой собственный IP-адрес, который, как я знаю, работал в прошлом, когда я использовал php geo IP с 'PECL'. Конечно, вы могли бы сказать, почему я просто не использую этот способ, но, к сожалению, я не могу спуститься по этому маршруту. – Javacadabra

ответ

0

просто хотел сказать, что я решил проблему. Ошибка с моей стороны и, вероятно, признак того, что мне нужен перерыв!

В geoip.inc.php поставляется Maxmind я первоначально получаю эти ошибки:

Не можете переобъявить geoip_country_code_by_name() в geoip.inc на линии 438

Для того, чтобы исправить это, я просто проверить, если метод определен и если не я использую его следующим образом:

if (!function_exists('geoip_country_code_by_name')) { 
    function geoip_country_code_by_name($gi, $name) { 
     $country_id = geoip_country_id_by_name($gi, $name); 
     if ($country_id !== false) { 
      return $gi->GEOIP_COUNTRY_CODES[$country_id]; 
     } 
     return false; 
    } 
} 

Я, к сожалению, была небольшая опечатка в коде выше, препятствующую выполнение кода должным образом, следовательно, returing 0 каждый раз.

Смежные вопросы