Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die IP-Adresse eines Benutzers in PHP genau ermitteln?

Wie kann ich die IP-Adresse eines Benutzers in PHP genau ermitteln?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-24 07:25:13591Durchsuche

How Can I Accurately Get a User's IP Address in PHP?

So rufen Sie die IP-Adresse eines Benutzers in PHP genau ab

Das Abrufen der IP-Adresse eines Benutzers in PHP kann aufgrund der Verwendung eine herausfordernde Aufgabe sein von Proxys und anderen Faktoren, die die wahre IP-Adresse verschleiern können. Es stehen zwar mehrere Methoden zur Verfügung, von denen jede ihre eigenen Einschränkungen hat, aber das Verständnis des effektivsten Ansatzes kann einen genauen IP-Abruf gewährleisten.

Eine gängige Methode ist die Verwendung der globalen Variablen $_SERVER. Es bietet verschiedene Header, die möglicherweise IP-Informationen enthalten. Unter anderem enthält REMOTE_ADDR die IP-Adresse des letzten bekannten Clients; Diese Methode gilt jedoch nicht als zuverlässig, da sie leicht gefälscht werden kann.

Um dieses Problem zu beheben, haben PHP-Entwickler einen umfassenderen Ansatz entwickelt, der mehrere $_SERVER-Header nutzt. Bei diesem Ansatz wird über HTTP_CLIENT_IP nach gemeinsam genutzten Internet-/ISP-IP-Adressen gesucht. Darüber hinaus werden IP-Adressen untersucht, die Proxys über Header wie HTTP_X_FORWARDED_FOR, HTTP_X_FORWARDED, HTTP_X_CLUSTER_CLIENT_IP, HTTP_FORWARDED_FOR usw. passieren HTTP_FORWARDED.

Es wird davon ausgegangen, dass einer dieser Header eine genauere IP-Adresse liefert. Um die Gültigkeit sicherzustellen, wird die Funktion validate_ip verwendet, um private Netzwerke und ungültige IP-Adressen herauszufiltern.

Hier ist eine vereinfachte Version des in der Frage bereitgestellten Codes:

function get_ip_address(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); // just to be safe

                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}

Obwohl diese Methode die Genauigkeit erheblich verbessert, bleibt sie anfällig für böswillige Benutzer, die möglicherweise ihre eigenen Anforderungsheader einfügen. Für geschäftskritische Anwendungen wird empfohlen, sich ausschließlich auf REMOTE_ADDR zu verlassen.

Das obige ist der detaillierte Inhalt vonWie kann ich die IP-Adresse eines Benutzers in PHP genau ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn