我想创建一个国家下拉菜单,可以根据他/她的IP地址预先选择用户国家。例如,如果用户在意大利,它必须首先显示意大利,同时将所有其他国家列入清单。php国家下拉由maxmind geoip
我搜索了很多,我开始下载Maxmind GeoIP API和数据库。这就是我想和那只能说明没有预先选择通过IP地址的国家正常的下拉列表:
<select name="" multiple="multiple" width="200px" size="10px">
<?php
require 'vendor/autoload.php'; //I put this is /var/www where my php file is
$gi = geoip_open('/usr/local/share/GeoIP/GeoIP.dat', GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
echo $ip;
$preselect_country = geoip_country_code_by_addr($gi, $ip);
//newCountry.php is where I select all countries for drop down list
include('newCountry.php');
while ($line = mysql_fetch_array($result)) {
if($preselect_country == $line){
$selected = "selected";
}else{
$selected = "";
}
?>
<option value="<?php echo $line['country'];?>"<?php echo $selected; ?>><?php echo $line['country'];?> </option>;
<?php
}
?>
geoip_close($gi);
?>
</select>
我真的尽力了我自己想办法了,我读了所有这些类似的问题,也尝试过其他解决方案,如: Automatic Dropdown based on Country with Geoplugin,Fetching the current country name using ip address in php,Get Country of IP Address with PHP,Getting visitors country from their Ip等等,但我不知道为什么它不起作用。 我想这个代码的工作,所以我发现我可以得到IP:
$ip = $_SERVER['REMOTE_ADDR'];
echo $ip;
而且这个样品为我工作(输出ES西班牙),
<?php
require 'vendor/autoload.php';
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
geoip_close($gi);
?>
但如果我尝试准确只需用$ ip替换“80.24.24.24”即可得到相同的代码,但它不会返回任何结果!
#EDIT: 好,感谢@vch,我发现因为是专用网络问题涉及到我的IP,所以我使用ifconfig得到了我真正的互联网IP,在我的代码中使用它和它的工作好。直到这一点,我发现我安装的geoip api没有问题,并且下拉预选效果也很好。
这是新代码:
<select name = "question" class = "question" id = 'Question'>
<?php
require 'vendor/autoload.php';
$gi = geoip_open('/usr/local/share/GeoIP/GeoIP.dat', GEOIP_STANDARD);
$ip = "131.175.122.222";
$preselect_country = geoip_country_name_by_addr($gi, $ip);
include('newCountry.php');
while ($line = mysql_fetch_array($result)) {
if($preselect_country == $line['country']){
$selected = "selected";
}else{
$selected = "";
}
echo "<option value=\"{$line['country']}\" {$selected}>{$line['country']}</option>\n";
}
geoip_close($gi);
?>
</select>
现在的问题是如何让用户真正的Internet IP在他们使用专用网络像我这样的情况?
所有的想法都高度赞赏,
感谢,
首先,尝试开启[错误报告](http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php)?这总是第一步。 – vch 2014-09-21 11:16:35
@vch,我刚刚检查了error.log,我正在阅读你建议的链接。我会试试 – mOna 2014-09-21 11:27:59
@vch:我在error.log中没有收到任何错误,我想我的问题与此ip相关:10.48.44.43(这是我通过运行$ _SERVER ['REMOTE_ADDR']获得的IP ;),当我在任何获得ip和返回国家的网站上输入这个IP时,即使在这些网站上它也不会返回任何内容!相反,他们告诉我另一个IP!我真的很困惑:( – mOna 2014-09-21 15:10:20