Anleitung zur IP-Geolokalisierung mit PHP

Ermitteln Sie Land, Stadt und ungefähre Koordinaten für eine IP-Adresse mit PHP.

Eine IP-Adresse mit PHP abfragen

Die Anfrage akzeptiert eine IPv4- oder IPv6-Adresse und fordert JSON an. Ersetzen Sie die Beispieladresse durch die Adresse, die Sie untersuchen möchten.

Standortanfrage für eine einzelne 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);
}

Erfordert PHP mit der cURL-Erweiterung. Das Verbindungszeitlimit beträgt drei Sekunden, das Gesamtzeitlimit der Anfrage acht Sekunden.

Standortfelder auswerten

location.country_code ist der zweistellige Ländercode; location.country ist der Ländername. location.city kann leer sein, auch wenn das Land bekannt ist. Behandeln Sie einen leeren Wert weiterhin als unbekannt.

location.latitude und location.longitude sind ungefähre Koordinaten des Netzwerkstandorts. Prüfen Sie vor der Anzeige, ob eine verwertbare Standortbezeichnung vorliegt; numerische Koordinaten allein belegen keinen Standort. Sie identifizieren weder ein Gerät noch eine Person.

Um die Adresse der anfragenden Verbindung zu ermitteln, rufen Sie folgenden Endpunkt auf: https://api.ipquery.io/?format=json. Eine Serveranfrage liefert die IP, mit der sich der Server verbindet; eine Browseranfrage liefert die nach außen sichtbare Adresse seiner Verbindung.

Alle Antwortfelder

Genauigkeit und Sicherheit

IP-Geolokalisierung ist eine Schätzung des Netzwerkstandorts, kein Gerätestandort. VPNs, Proxys, Mobilfunknetze und Gateways von Netzbetreibern können dazu führen, dass die Adresse weit vom Nutzer entfernt verortet wird. Behandeln Sie fehlende Werte als unbekannt, statt sie durch Vermutungen zu ersetzen.

Wenn Ihre Anwendung X-Forwarded-For auswertet, vertrauen Sie dem Header nur, wenn er von einem von Ihnen kontrollierten Proxy stammt. Vom Client gelieferte Header können gefälscht sein. Validieren Sie Adressen vor Standortabfragen und behandeln Sie Zeitüberschreitungen und HTTP-Fehler getrennt von erfolgreichen Ergebnissen.

API-Referenz

Zugriff auf vollständige Listen.

Für Preise oder vollständige Listen schreiben Sie an contact@ipquery.io.

Ausgewählte Liste
Ausgewählte Einträge
Einträge in dieser Liste