раскрывающееся меню — раскрывающееся меню php от maxmind geoip

Я хотел бы создать раскрывающийся список стран, в котором можно предварительно выбрать страну пользователя на основе его / ее 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, Получение текущего названия страны с использованием IP-адреса в php, Получить страну IP-адреса с PHP, Получение посетителей страны из их 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);

?>

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

#РЕДАКТИРОВАТЬ:
Что ж, благодаря @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>

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

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

Спасибо,

0

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]