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