2 votes

Géocode IP en utilisant l'écho PHP

J'essaie d'afficher le pays de l'utilisateur (en fonction de son IP) dans une valeur de saisie de formulaire.

Voici mon code jusqu'à présent

<input style="display:block" type="text" name="country" id="country" value="<?php               
$pageContent = file_get_contents('http://freegeoip.net/json/echo $_SERVER['REMOTE_ADDR']');
$parsedJson  = json_decode($pageContent);
echo $parsedJson->country_name; ?>" />

J'utilise PHP JSON-decode pour obtenir les données de "http://freegeoip.net/json/(IP ADDRESS)".

Ce site web géocode l'adresse IP et renvoie un nom de pays.

Ce que je veux, c'est pouvoir substituer l'adresse IP d'un utilisateur dans cette adresse web, qui renverrait alors le nom du pays de l'utilisateur. Le meilleur moyen auquel j'ai pensé est d'utiliser

<?php echo $_SERVER['REMOTE_ADDR']; ?> 

mais quand je l'insère, j'obtiens une erreur de serveur.

Comment dois-je m'y prendre ?

11voto

Jeroen Points 7500
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);

Vous ne pouvez pas utiliser echo à l'intérieur d'une fonction. Au lieu de cela, vous devez utiliser la fonction opérateur de concaténation .

Aussi, un meilleur code serait quelque chose comme ceci :

<?php               
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);
$parsedJson  = json_decode($pageContent);
?>
<input style="display:block" type="text" name="country" id="country" value="<?php echo htmlspecialchars($parsedJson->country_name); ?>" />

2voto

Brad Points 61171
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);

Il n'est pas nécessaire de faire un écho dans un paramètre de type chaîne... il suffit de concaténer avec . .

1voto

daan.desmedt Points 3041

J'ai eu besoin de la GeoIP services moi-même dans certains projets ces derniers temps. J'ai créé une ** PHP wrapper **, au cas où d'autres personnes chercheraient un PHP aide pour cela.

Vous pouvez consulter le site https://github.com/DaanDeSmedt/FreeGeoIp-PHP-Wrapper

0voto

jedema Points 4416

Depuis que Freegeoip est devenu un service payant ( https://ipstack.com/ ), si vous voulez un service simple et gratuit, vous pouvez utiliser ip-api.com au lieu de freegeoip.net :

function getDataOfIp($ip) {
    try {
        $pageContent = file_get_contents('http://ip-api.com/json/' . $ip);
        $parsedJson  = json_decode($pageContent);
        return [
            "country_name" => $parsedJson->country,
            "country_code" => $parsedJson->countryCode,
            "time_zone" => $parsedJson->timezone
        ];
    } 
    catch (Exception $e) {
        return null;
    }
}

Vous devez adapter la valeur de retour en fonction des données dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X