php国家下拉列表由maxmind-geoap



我想创建一个国家/地区下拉列表,可以根据用户的Ip地址预先选择用户的国家/地区。例如,如果用户在意大利,则必须首先显示意大利,同时保留列表中的所有其他国家。

我搜索了很多,并通过下载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>

我真的尽了最大努力自己找到解决方案,我阅读了所有这些类似的问题,也尝试了其他解决方案,例如:基于Geoplugin的国家的自动下拉,使用php中的ip地址获取当前国家名称,使用php获取ip地址的国家,从他们的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",它将一无所获!!

#编辑:好吧,多亏了@vch,我发现这个问题与我的ip有关,因为它是用于私人网络的,所以我通过ifconfig获得了我真正的互联网ip,并在我的代码中使用了它,它运行得很好。到目前为止,我发现我安装的geoap 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>

现在我的问题是,如果用户像我一样使用私人网络,如何获得他们的真实互联网ip?

高度赞赏所有想法

谢谢,

尝试使用以下代码获取IP,希望它能返回确切的IP。

$ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');

最新更新