menu a discesa php di maxmind geoip

Vorrei creare un elenco a discesa dei paesi in grado di preselect il paese dell'utente in base al suo indirizzo IP. ad esempio, se l'utente è in Italia, deve mostrare prima l'Italia mantenendo tutti gli altri paesi nell'elenco.

Ho cercato molto e ho iniziato scaricando Maxmind GeoIP API e database. Questo è quello che ho provato e mostra solo un normale elenco a discesa senza preselect il paese per 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_arrays($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> 

Ho davvero fatto del mio meglio per trovare la soluzione da solo, ho letto tutte queste domande simili e ho provato anche altre soluzioni come: Dropdown automatico basato su Paese con Geoplugin , Recupero del nome del paese corrente usando l'indirizzo IP in php , Ottieni Paese di Indirizzo IP con PHP , far sì che i visitatori arrivino dal loro IP e molti altri, ma non so perché non funzioni. Ho provato questo codice che ha funzionato, quindi ho scoperto che posso get l'IP:

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

Anche questo campione ha funzionato per me (l'output è 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); ?> 

ma se provo esattamente lo stesso codice sostituendo semplicemente "80.24.24.24" con $ ip, non restituisce nulla !!

#EDIT: Bene, grazie a @vch, ho scoperto che il problema è legato al mio ip dato che è per la networking privata, quindi ho ottenuto il mio ip di internet reale da ifconfig e l'ho usato nel mio codice e ha funzionato bene. Fino a questo punto, ho scoperto che non c'è alcun problema con geoip api che ho installato e anche il preselezione a discesa funziona bene.

Questo è il nuovo codice:

 <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_arrays($result)) { if($preselect_country == $line['country']){ $selected = "selected"; }else{ $selected = ""; } echo "<option value=\"{$line['country']}\" {$selected}>{$line['country']}</option>\n"; } geoip_close($gi); ?> </select> 

Ora la mia domanda è come get un vero IP da internet degli utenti nel caso in cui usassero reti private come me?

Tutte le idee sono molto apprezzate,

Grazie,

prova ad get l'IP usando il codice sottostante, spero che ti restituisca l'esatto 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');