Localiser une IP en php

Résolu/Fermé
Herve_be Messages postés 1077 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 6 décembre 2024 - 20 juin 2020 à 15:03
Herve_be Messages postés 1077 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 6 décembre 2024 - 29 juin 2020 à 09:36
Bonjour,
Je trouve des réponses sur https://forums.commentcamarche.net/forum/ mais elles ne sont pas récentes; j'en ai essayé quelques unes : soit ça ne fonctionne pas du tout, soit le nombre d'interrogations est limité, ...
Bref, comment obtenir le pays et si possible la ville correspondants à une adresse IP ?
Merci

32 réponses

Utilisateur anonyme
Modifié le 20 juin 2020 à 15:52
Bonjour,

Tu peux utiliser les bases GeoIP mises à disposition par Maxmind.

Pour les télécharger il faut s'inscrire sur le site de Maxmind :
https://dev.maxmind.com/geoip/geoip2/geolite2/

Pour les utiliser tu as une lib officielle, tout est expliqué avec des exemples :
https://github.com/maxmind/GeoIP2-php

Un rapide exemple fonctionnel, à adapter :
(j'utilise les ternaires de PHP7, à transformer en ternaire classique sur les anciennes versions)
<?php
    // dépendances
    require_once 'vendor/autoload.php';
    use GeoIp2\Database\Reader;

    // choix de la base, GeoLite2-City contient les villes (City)
    // sinon Geolite2-Country.mmdb suffit pour les pays
    $reader = new Reader('GeoLite2-City.mmdb');

    // choix d'une IP
    $record = $reader->city("195.248.251.112");

    print(
        // country->names['code-pays'], nom localisé
        ($record->country->names['fr'] ?? "Pays introuvable") .
        '<br/>' .
        // idem, peut retourner NULL, j'anticipe avec une ternaire
        ($record->city->names['fr'] ?? "Ville introuvable")
    );
?>


Résultat :
France
Paris
0