Guide de géolocalisation IP en PHP

Obtenez le pays, la ville et les coordonnées approximatives d’une adresse IP en PHP.

Rechercher une adresse IP en PHP

La requête accepte une seule adresse IPv4 ou IPv6 et demande du JSON. Remplacez l’adresse de l’exemple par celle que vous souhaitez examiner.

Requête de localisation d’une seule IP
<?php
$ip = '8.8.8.8'; // Replace with a validated IPv4 or IPv6 address.
if (!filter_var($ip, FILTER_VALIDATE_IP)) {
    throw new InvalidArgumentException('Invalid IP address');
}
$url = 'https://api.ipquery.io/' . rawurlencode($ip) . '?format=json';
$handle = curl_init($url);
curl_setopt_array($handle, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 3,
    CURLOPT_TIMEOUT => 8,
]);
$body = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if ($body === false) {
    $error = curl_error($handle);
    throw new RuntimeException('IP lookup failed: ' . $error);
}
if ($status !== 200) {
    throw new RuntimeException('IPQuery returned HTTP ' . $status);
}
$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
if (($data['ip'] ?? null) !== $ip || !isset($data['location']) || !is_array($data['location'])) {
    throw new RuntimeException('Unexpected IPQuery response');
}
$location = $data['location'];
$countryCode = strtoupper(trim((string) ($location['country_code'] ?? '')));
$city = trim((string) ($location['city'] ?? ''));
echo 'Country code: ' . ($countryCode ?: 'Unknown') . PHP_EOL;
echo 'City: ' . ($city ?: 'Unknown') . PHP_EOL;

// Coordinates describe an approximate network location, not the user.
$latitude = $location['latitude'] ?? null;
$longitude = $location['longitude'] ?? null;
if (preg_match('/^[A-Z]{2}$/', $countryCode) &&
    !in_array($countryCode, ['XX', 'ZZ'], true) &&
    is_numeric($latitude) && is_numeric($longitude)) {
    printf('Approximate coordinates: %.5f, %.5f%s', $latitude, $longitude, PHP_EOL);
}

Nécessite PHP avec l’extension cURL. Le délai de connexion est limité à trois secondes et la durée totale de la requête à huit secondes.

Lire les champs de localisation

location.country_code est le code pays à deux lettres ; location.country est le nom du pays. location.city peut être vide même si le pays est connu. Conservez une valeur vide comme inconnue.

location.latitude et location.longitude sont des coordonnées approximatives de la localisation du réseau. Vérifiez la présence d’un libellé de lieu exploitable avant de les afficher ; des coordonnées numériques seules ne permettent pas d’établir une localisation. Elles n’identifient ni un appareil ni une personne.

Pour obtenir l’adresse à l’origine de la requête, appelez https://api.ipquery.io/?format=json. Une requête envoyée par un serveur renvoie l’IP avec laquelle celui-ci se connecte ; une requête du navigateur renvoie l’adresse visible de sa connexion.

Tous les champs de réponse

Précision et sécurité

La géolocalisation IP est une estimation de la localisation du réseau, pas de celle d’un appareil. Les VPN, proxies, réseaux mobiles et passerelles des opérateurs peuvent situer l’adresse loin de l’utilisateur. Traitez les valeurs manquantes comme inconnues plutôt que de les remplacer par une supposition.

Si votre application lit X-Forwarded-For, ne lui faites confiance que s’il est fourni par un proxy que vous contrôlez. Les en-têtes fournis par le client peuvent être falsifiés. Validez les adresses avant d’effectuer les recherches et traitez les délais d’attente et les erreurs HTTP séparément d’un résultat réussi.

Référence de l’API

Accès aux listes complètes.

Pour les tarifs ou l’accès aux listes complètes, écrivez à contact@ipquery.io.

Liste sélectionnée
Enregistrements sélectionnés
Enregistrements dans cette liste