Start · Sprachen · PHP · Referenz · geoip_id_by_name

geoip_id_by_name

Funktion

Gibt den Typ der Internetverbindung (Connection-Type) für einen Hostnamen oder eine IP-Adresse anhand der GeoIP-Datenbank zurück.

seit PHP 5.0.0 Kategorie: misc

Signatur

geoip_id_by_name(string $hostname): int

Beschreibung

geoip_id_by_name() ermittelt anhand der MaxMind-GeoIP-Datenbank, mit welchem Verbindungstyp ein Host oder eine IP-Adresse mit dem Internet verbunden ist. Der Rückgabewert ist eine ganzzahlige Konstante, die verschiedenen Verbindungstypen wie Modem, DSL, Unternehmensnetzwerk oder Mobilfunk entspricht.

Die Funktion gehört zur PECL-Extension geoip und benötigt eine lokal installierte GeoIP-Datenbank (NetSpeed-Edition). Sie ist besonders nützlich, wenn Anwendungen ihr Verhalten an die Verbindungsqualität des Nutzers anpassen möchten – etwa um bandbreitenintensive Inhalte für Nutzer mit langsamen Verbindungen zu reduzieren.

Als Rückgabewert wird eine der folgenden Konstanten verwendet: GEOIP_UNKNOWN_SPEED, GEOIP_DIALUP_SPEED, GEOIP_CABLEDSL_SPEED, GEOIP_CORPORATE_SPEED oder GEOIP_CELULAR_SPEED (historisch falsch geschrieben). Ist der Hostname unbekannt oder die Datenbank nicht vorhanden, wird GEOIP_UNKNOWN_SPEED zurückgegeben.

Da die Funktion auf einer statischen Datenbank basiert, die regelmäßig aktualisiert werden muss, können die Ergebnisse veraltet sein. Für produktive Umgebungen empfiehlt sich der Einsatz aktueller Datenbank-Updates von MaxMind.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Ein Hostname (z. B. example.com) oder eine IPv4-Adresse als Zeichenkette, für die der Verbindungstyp ermittelt werden soll.

Rückgabewert

Typ
int
Beschreibung
Gibt eine der GeoIP-Verbindungstyp-Konstanten zurück: GEOIP_UNKNOWN_SPEED (0), GEOIP_DIALUP_SPEED (1), GEOIP_CABLEDSL_SPEED (2), GEOIP_CORPORATE_SPEED (3) oder GEOIP_CELULAR_SPEED (4). Bei unbekanntem Host oder fehlender Datenbank wird GEOIP_UNKNOWN_SPEED zurückgegeben.

Beispiele

Verbindungstyp eines Hostnamens ermitteln

<?php
$hostname = 'example.com';
$connectionId = geoip_id_by_name($hostname);

switch ($connectionId) {
    case GEOIP_DIALUP_SPEED:
        echo "Einwahlverbindung (Modem/ISDN)";
        break;
    case GEOIP_CABLEDSL_SPEED:
        echo "Kabel- oder DSL-Verbindung";
        break;
    case GEOIP_CORPORATE_SPEED:
        echo "Unternehmensnetzwerk (T1/T3/Hochgeschwindigkeit)";
        break;
    case GEOIP_CELULAR_SPEED:
        echo "Mobilfunk-Verbindung";
        break;
    case GEOIP_UNKNOWN_SPEED:
    default:
        echo "Verbindungstyp unbekannt";
        break;
}
Verbindungstyp unbekannt

Inhalte je nach Verbindungstyp anpassen

<?php
$userIp = $_SERVER['REMOTE_ADDR'];
$connectionId = geoip_id_by_name($userIp);

if ($connectionId === GEOIP_DIALUP_SPEED || $connectionId === GEOIP_CELULAR_SPEED) {
    // Leichtgewichtige Version der Seite für langsame Verbindungen
    echo "<img src='thumbnail_small.jpg' alt='Vorschau'>";
} else {
    // Vollauflösung für Breitband-Nutzer
    echo "<img src='thumbnail_large.jpg' alt='Vorschau'>";
}

// Wichtig · Fallstricke

Veraltete Extension: Die geoip-PECL-Extension gilt als veraltet und wird nicht mehr aktiv gewartet. MaxMind hat den Support für das alte GeoIP-Datenbankformat (GeoIP Legacy) eingestellt. Für neue Projekte sollte stattdessen die GeoIP2-PHP-Bibliothek von MaxMind mit dem .mmdb-Datenbankformat verwendet werden.

Datenbank erforderlich: Die Funktion benötigt eine lokal installierte GeoIP-NetSpeed-Datenbank. Fehlt diese oder ist die Extension nicht geladen, erzeugt PHP einen fatalen Fehler bzw. E_WARNING.

Schreibfehler in Konstante: Die Konstante GEOIP_CELULAR_SPEED enthält einen historischen Tippfehler (korrekt wäre CELLULAR). Dieser ist Teil der offiziellen API und muss so verwendet werden.