2015-01-18 7 views
5

Sto usando ipinfo.io per ottenere la mia città corrente (posizione) utilizzando PHP.Come ottenere la posizione da ipinfo.io in PHP?

Tuttavia, non sono in grado di vedere la mia città quando si utilizza questo pezzo di codice.

$ipaddress = $_SERVER["REMOTE_ADDR"]; 

function ip_details($ip) { 
    $json = file_get_contents("http://ipinfo.io/{$ip}/geo"); 
    $details = json_decode($json); 
    return $details; 
} 

$details = ip_details($ipaddress); 
echo $details->city; 

non so dove l'errore è.

+2

E qual è l'errore? Cosa hai provato? Quali sono i log? Cosa produce var_dump (j $ json)? PS. Grazie per un ottimo portale addrres per il futuro :). –

+0

Ho cercato di echo $ json = file_get_contents ('http://ipinfo.io/8.8.8.8/geo'); ma non c'è nulla che appare - ancora con schermo vuoto. –

+0

Provare: var_dump (file_get_contents ('http://ipinfo.io/8.8.8.8/geo')); Se questo non mostra nulla qualcosa non va bene con la configurazione del server ... Probabilmente blocca (come, e perché?) Ottenere contenuti da IP esterni. Avviso HTTP: // nel mio codice. –

risposta

6
function getClientIP(){ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
    $ip = $_SERVER['HTTP_CLIENT_IP']; 
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    } else { 
    $ip = $_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

$ipaddress = getClientIP(); 

function ip_details($ip) { 
    $json = file_get_contents("http://ipinfo.io/{$ip}/geo"); 
    $details = json_decode($json, true); 
    return $details; 
} 

$details = ip_details($ipaddress); 
echo $details['city']; 

questo dovrebbe funzionare.

tuttavia, ti consiglio di abituarti a usare arricciare invece di file_get_contents(), se vuoi una risorsa online. https://stackoverflow.com/a/5522668/3160141

+0

la parte $ ipaddress è corretta. Posso ottenere l'indirizzo IP del client. Tuttavia, la parte IPINFO restituisce una schermata vuota. –

+0

c'è stato un errore, ho capovolto json_dencode() invece un json_decode() – Octal

+0

Ancora vuoto. Io non so cosa fare. –

2

Stai lavorando su localhost? Provate il seguente codice:

$ipaddress = $_SERVER["REMOTE_ADDR"]; 

function ip_details($ip) { 
    $json = file_get_contents("http://ipinfo.io/{$ip}/geo"); 
    $details = json_decode($json); // HERE!!! 
    return $details; 
} 

$details = ip_details($ipaddress); 
echo $details->ip; // CHANGE TO IP!!! 

Se restituisce il tuo IP, tutto è OK, il tuo IP è probabilmente 127.0.0.1, e questo sito non conosce la posizione, in modo da $details->city non è impostato. Devi controllare lo if (isset($details->city)) e creare uno script alternativo se la città non è presente.


vedo Hai ancora problemi. Prova a fare qualcosa di simile:

$string = file_get_contents('http://ipinfo.io/8.8.8.8/geo'); 
var_dump($string); 
$ipaddress = $_SERVER["REMOTE_ADDR"]; 
var_dump($ipaddress); 
$string2 = file_get_contents('http://ipinfo.io/'.$ipaddress.'/geo'); 
var_dump($string2); 

E scrivere nei commenti che uno fallito;).


Se solo una parte IP è OK, provate a leggere questo:File_get_contents not working?

E anche eseguire questo codice con il massimo segnalazione degli errori:

error_reporting(-1); 

Prima di questa parte del codice.

+0

In esecuzione su un server esterno, non su localhost. Nessun IP restituito che è strano. E 'IPINFO che non mi permette di girare su quel server esterno? –

+0

Questo è impossibile. Aggiornerò la mia risposta tra qualche minuto. Aggiornato! Prova a eseguire il debug in questo modo semplice ...Forse aiuterà a trovare il problema. –

+0

Primo tentativo fallito. L'ultimo - bool (falso) Posso comunque cancellare il mio indirizzo IP ($ ipaddress). –

Problemi correlati