我正在實施一些geoIP
功能來將用戶從我的.com網站重定向到相關的國家域(.fr,.es,.co.uk等)。返回的地理信息服務功能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;
}
這CAL 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來檢查國家代碼。
我檢查了mbstring
在我的php.ini文件中啓用,它是。出於某種原因,它只是沒有找到基於我傳遞給它的IP的國家代碼。有沒有人有任何幫助可能造成這種情況?
並非每個IP地址都與一個位置相關聯(並且任何geoip服務返回的位置最多隻是一個受過教育的猜測)。這是發生在你傳遞的所有地址嗎? – Piskvor
是的,我甚至用我自己的IP地址嘗試過,當我用'PECL'使用php地理IP時,我知道過去我工作過的IP地址。當然你可能會說爲什麼我不這樣使用,但不幸的是我不能走這條路。 – Javacadabra