Я хотел бы создать раскрывающийся список стран, в котором можно предварительно выбрать страну пользователя на основе его / ее 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 пользователей, если они используют частные сети, как я?
Все идеи высоко ценятся,
Спасибо,
попытайтесь получить 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');
Других решений пока нет …