Start · Sprachen · PHP · Referenz · geoip_country_code3_by_name

geoip_country_code3_by_name

Funktion

Ermittelt den dreistelligen ISO-3166-1-alpha-3-Ländercode für einen Hostnamen oder eine IP-Adresse anhand der GeoIP-Datenbank.

seit PHP 1.0.0 Kategorie: misc

Signatur

geoip_country_code3_by_name(string $hostname): string|false

Beschreibung

Die Funktion geoip_country_code3_by_name() gehört zur PECL-Erweiterung geoip und sucht in der MaxMind-GeoIP-Datenbank nach dem Land, das einer IP-Adresse oder einem Hostnamen zugeordnet ist. Zurückgegeben wird der dreistellige Ländercode nach ISO 3166-1 alpha-3 (z. B. DEU für Deutschland, USA für die Vereinigten Staaten).

Im Gegensatz zu geoip_country_code_by_name(), die den zweistelligen Code liefert, eignet sich diese Funktion besonders dort, wo der dreistellige Code in Systemen oder Datenbanken erwartet wird, die den ISO-3166-1-alpha-3-Standard verwenden.

Als Eingabe kann sowohl ein Domainname (z. B. www.example.com) als auch eine IPv4-Adresse in Punkt-Notation übergeben werden. Bei einem Domainnamen wird intern eine DNS-Auflösung durchgeführt, bevor die Datenbankabfrage erfolgt.

Die Genauigkeit der Ergebnisse hängt vollständig von der Aktualität der verwendeten GeoIP-Datenbank ab. Für produktive Umgebungen sollte die Datenbank regelmäßig aktualisiert werden, da sich IP-Zuordnungen ändern können.

Parameter

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

Rückgabewert

Typ
string|false
Beschreibung
Gibt den dreistelligen ISO-3166-1-alpha-3-Ländercode als Zeichenkette zurück (z. B. DEU, USA, GBR). Falls kein Eintrag gefunden wird oder die GeoIP-Datenbank nicht verfügbar ist, wird false zurückgegeben.

Beispiele

Dreistelligen Ländercode für eine IP-Adresse ermitteln

<?php
// IP-Adresse eines deutschen Servers (Heise-Verlag)
$ip = '193.99.144.80';

$code3 = geoip_country_code3_by_name($ip);

if ($code3 !== false) {
    echo 'Dreistelliger Ländercode: ' . $code3 . PHP_EOL;
} else {
    echo 'Kein Ländercode gefunden.' . PHP_EOL;
}
Dreistelliger Ländercode: DEU

Ländercode für einen Hostnamen ermitteln und vergleichen

<?php
// Erlaubte Länder (dreistellig) für eine Geo-Sperre
$allowed = ['DEU', 'AUT', 'CHE'];

$hostname = 'www.example.at';
$code3 = geoip_country_code3_by_name($hostname);

if ($code3 === false) {
    echo 'Herkunftsland konnte nicht bestimmt werden.';
} elseif (in_array($code3, $allowed, true)) {
    echo 'Zugriff erlaubt für Land: ' . $code3;
} else {
    echo 'Zugriff verweigert. Ermittelter Ländercode: ' . $code3;
}
Zugriff erlaubt für Land: AUT

// Wichtig · Fallstricke

Verfügbarkeit: Diese Funktion ist nur verfügbar, wenn die PECL-Erweiterung geoip installiert und eine gültige GeoIP-Datenbank (z. B. von MaxMind) konfiguriert ist. Ohne diese Voraussetzungen löst der Aufruf einen fatalen Fehler aus.

Genauigkeit: IP-Geolokalisierung ist keine exakte Wissenschaft. Die Ergebnisse können ungenau sein, insbesondere bei VPN-Nutzern, Proxys oder Hosts mit dynamischen IPs. Verwende die Funktion daher nicht für sicherheitskritische Zugriffsentscheidungen.

Deprecation: Die PECL-geoip-Erweiterung wird kaum noch weiterentwickelt. Für neue Projekte empfiehlt sich die Verwendung modernerer Alternativen wie der MaxMind GeoIP2 PHP API in Kombination mit deren Datenbanken im MMDB-Format.