Выпадающее окно php country by 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>

Я действительно изо всех сил пытался найти решение самостоятельно, я прочитал все эти похожие вопросы и попробовал также другие решения, такие как: Автоматическое раскрытие на основе страны с помощью Geoplugin, Получение текущего имени страны с использованием IP-адреса в php, Получить страну IP-адреса с PHP, Получение страны-посетителя из их Ip и многое другое, но я не знаю, почему это не Работа. Я пробовал этот код, который работал, поэтому я нашел, что могу получить ip:

 $ip =  $_SERVER['REMOTE_ADDR']; 
  echo $ip;

Также этот образец работал у меня (выход - ES Spain),

<?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);

 ?>

но если я попробую точно такой же код, просто заменив "80.24.24.24" на $ip, он ничего не вернет!!

#edit: Ну, благодаря @vch, я обнаружил, что проблема связана с моим ip, так как для частной сети, поэтому я получил свой реальный IP-адрес через ifconfig и использовал его в своем коде, и он работал хорошо. До этого момента я обнаружил, что нет никаких проблем с 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>

Теперь мой вопрос: как получить реальный интернет-доступ для пользователей, если они используют такие частные сети, как я?

Все идеи высоко оценены,

Спасибо,

Ответ 1

попытайтесь получить 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');