de.comp.lang.php.* FAQ

25.14. Wie kann ich prüfen, ob eine IP-Adresse in einem bestimmten Bereich liegt?

Keywords: IP | Range | Adresse

Antwort von Johannes Frömter

PHP4 bietet die Funktion ip2long() , mit der man eine IP-Adresse in Punktschreibweise ("dotted quad") in die numerische Form umrechnen kann, was einen einfachen größer/kleiner-Vergleich erlaubt. Der Haken daran: Bei PHP beträgt der Maximalwert eines Integer-Typen etwas über 2 Milliarden (genau: 2.147.483.647, vorzeichenbehafteter 32-Bit-Wert), was für die Umrechnung von IP-Adressen nicht ausreicht; bei 127.255.255.255 ist Schluss, danach wechselt das Vorzeichen.

Wandelt man die IP dagegen in einen String um, gibt es dieses Limit nicht. Dann kann man einfach mittels if() oder strcmp() vergleichen:

if (ip2str($start) <= ip2str($ip)
    AND
    ip2str($ip) <= ip2str($ende))
...

function ip2str($ip) {
    $ip = preg_replace("/(\d{1,3})\.?/e",
                       'sprintf("%03d", \1)',
                        $ip);
    return (string)$ip;
}

Valid HTML 4.01! Valid CSS!

25.14. Wie kann ich prüfen, ob eine IP-Adresse in einem bestimmten Bereich liegt?
http://www.php-faq.de/q/q-code-ip-bereich.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team