Start · Sprachen · PHP · Referenz · geoip_country_code_by_name

geoip_country_code_by_name

Funktion

Ermittelt den zweistelligen ISO-3166-1-Ländercode (z. B. <code>DE</code>, <code>US</code>) für einen Hostnamen oder eine IP-Adresse anhand der GeoIP-Datenbank.

seit PHP 5.0.0 Kategorie: misc

Signatur

geoip_country_code_by_name(string $hostname): string|false

Beschreibung

geoip_country_code_by_name() gehört zur PECL-Erweiterung geoip und nutzt die MaxMind-GeoIP-Datenbank, um zu einem übergebenen Hostnamen oder einer IPv4-Adresse den zugehörigen zweistelligen Ländercode nach ISO 3166-1 alpha-2 zurückzugeben (z. B. DE für Deutschland, US für die USA).

Die Funktion ist dann sinnvoll, wenn eine schnelle, datenbankbasierte Geolokalisierung ohne externe API-Aufrufe benötigt wird, etwa um Inhalte zu regionalisieren, Zugriffsbeschränkungen umzusetzen oder Statistiken zu erheben. Die Genauigkeit hängt vom Aktualitätsstand der installierten GeoIP-Datenbank ab.

Wichtig: Die geoip-Erweiterung muss installiert und eine passende GeoIP.dat-Datenbank muss auf dem Server vorhanden und konfiguriert sein (geoip.database_standard in der php.ini). Für IPv6 steht stattdessen geoip_country_code_by_name() je nach Version zusammen mit einer IPv6-Datenbank zur Verfügung.

Da die GeoIP-PECL-Erweiterung seit Jahren nicht aktiv gepflegt wird und MaxMind auf das neuere GeoIP2-Format (mit dem offiziellen PHP-SDK) umgestellt hat, sollte für neue Projekte das MaxMind-GeoIP2-Composer-Paket bevorzugt werden.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Ein Hostname (z. B. www.example.de) oder eine IPv4-Adresse in Punkt-Notation (z. B. 217.160.0.1), für die der Ländercode ermittelt werden soll.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den zweistelligen ISO-3166-1-Ländercode als Zeichenkette zurück (z. B. 'DE'), wenn der Eintrag in der Datenbank gefunden wurde. Gibt false zurück, wenn der Hostname nicht aufgelöst werden konnte oder kein Datenbankeintrag vorhanden ist.

Beispiele

Ländercode einer IP-Adresse ermitteln

<?php
// Setzt voraus: PECL geoip-Erweiterung ist installiert und Datenbank vorhanden
$ip = '217.160.0.1'; // Beispiel-IP (Deutschland)
$code = geoip_country_code_by_name($ip);

if ($code !== false) {
    echo 'Ländercode: ' . $code; // z. B. 'DE'
} else {
    echo 'Ländercode konnte nicht ermittelt werden.';
}
Ländercode: DE

Zugriffsbeschränkung auf bestimmte Länder

<?php
// Nur Zugriffe aus Deutschland, Österreich und der Schweiz erlauben
$erlaubtelaender = ['DE', 'AT', 'CH'];

$ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
$code = geoip_country_code_by_name($ip);

if ($code === false || !in_array($code, $erlaubtelaender, true)) {
    http_response_code(403);
    echo 'Dieser Inhalt ist in Ihrem Land nicht verfügbar.';
    exit;
}

echo 'Willkommen! Ihr Ländercode: ' . htmlspecialchars($code);
Willkommen! Ihr Ländercode: DE

Ländercode über Hostnamen ermitteln

<?php
$host = 'www.bundesregierung.de';
$code = geoip_country_code_by_name($host);

if ($code !== false) {
    printf('Der Host "%s" wird dem Land "%s" zugeordnet.%s', $host, $code, PHP_EOL);
} else {
    echo 'Keine GeoIP-Information verfügbar.';
}
Der Host "www.bundesregierung.de" wird dem Land "DE" zugeordnet.

// Wichtig · Fallstricke

Datenschutz & Genauigkeit: IP-basierte Geolokalisierung ist nicht exakt — VPNs, Proxys und Tor-Knoten können das Ergebnis verfälschen. Verwende solche Daten nie als einzige Sicherheitsmassnahme.

Veraltete Erweiterung: Die PECL-Erweiterung geoip wird nicht aktiv gepflegt. Für neue Projekte wird das offizielle MaxMind GeoIP2 PHP-SDK empfohlen, das mit dem modernen .mmdb-Datenbankformat arbeitet.

Fehlerbehandlung: Ist die GeoIP-Datenbank nicht vorhanden oder nicht lesbar, gibt die Funktion false zurück und erzeugt möglicherweise eine PHP-Warnung. Prüfe deshalb stets den Rückgabewert mit === false.