Signatur
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
'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.';
}
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);
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.';
}
// 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.