1435 Stimmen

Wie man die IP-Adresse des Clients in PHP ermittelt

Wie kann ich die IP-Adresse des Clients mit PHP ermitteln?

Ich möchte den Benutzer, der sich auf meiner Website angemeldet hat, über seine IP-Adresse aufzeichnen.

6voto

Alexander Yancharuk Punkte 12744

Sicheres und warnendes Snippet zur Ermittlung der IP-Adresse:

$ip = filter_input(INPUT_SERVER, 'HTTP_CLIENT_IP', FILTER_VALIDATE_IP)
    ?: filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR', FILTER_VALIDATE_IP)
    ?: $_SERVER['REMOTE_ADDR']
    ?? '0.0.0.0'; // Or other value fits "not defined" in your logic

5voto

<?php
/**
 * Function to get the client ip address
 *
 * @return string The Ip address
 */
function getIp(): string {
    if (! empty($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    if (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    }

    return $_SERVER['REMOTE_ADDR'] ?? '?';
}

Noch kleiner

/**
 * Function to get the client ip address
 *
 * @return string The Ip address
 */
function getIp(): string {
    return $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '';
}

4voto

Versuchen Sie dies:

 $_SERVER['REMOTE_ADDR'];

3voto

vr_driver Punkte 1527

Ich bin überrascht, dass dies noch nicht erwähnt wurde. Es geht darum, die korrekten IP-Adressen der Websites zu erhalten, die hinter einer Infrastruktur wie CloudFlare eingebettet sind. Es wird Ihre IP-Adressen zu brechen, und geben sie alle den gleichen Wert. Glücklicherweise haben sie auch einige Server-Header zur Verfügung. Anstatt das neu zu schreiben, was bereits geschrieben wurde, schauen Sie hier für eine prägnantere Antwort, und ja, ich habe diesen Prozess vor langer Zeit auch durchlaufen. https://stackoverflow.com/a/14985633/1190051

2voto

jerryurenaa Punkte 2450

In PHP sollte die letzte Option, um die öffentliche IP zu erhalten, immer sein $_SERVER["REMOTE_ADDR"] aus viel zu vielen Sicherheitsgründen.

Hier ist ein Workaround, um die validierte IP-Adresse des Clients zu erhalten.

public static function getPublicIP() : string
    {
        $realIP = "Invalid IP Address";

        $activeHeaders = [];

        $headers = [
            "HTTP_CLIENT_IP",
            "HTTP_PRAGMA",
            "HTTP_XONNECTION",
            "HTTP_CACHE_INFO",
            "HTTP_XPROXY",
            "HTTP_PROXY",
            "HTTP_PROXY_CONNECTION",
            "HTTP_VIA",
            "HTTP_X_COMING_FROM",
            "HTTP_COMING_FROM",
            "HTTP_X_FORWARDED_FOR",
            "HTTP_X_FORWARDED",
            "HTTP_X_CLUSTER_CLIENT_IP",
            "HTTP_FORWARDED_FOR",
            "HTTP_FORWARDED",
            "ZHTTP_CACHE_CONTROL",
            "REMOTE_ADDR" #this should be the last option
        ];

        #Find active headers
        foreach ($headers as $key)
        {
            if (array_key_exists($key, $_SERVER))
            {
                $activeHeaders[$key] = $_SERVER[$key];
            }
        }

         #Reemove remote address since we got more options to choose from
        if(count($activeHeaders) > 1)
        {
            unset($activeHeaders["REMOTE_ADDR"]);
        }

        #Pick a random item now that we have a secure way.
        $realIP = $activeHeaders[array_rand($activeHeaders)];

        #Validate the public IP
        if (filter_var($realIP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
        {
            return $realIP;
        }

        return $realIP;
    }

Wie Sie hier sehen können, ist $_SERVER["REMOTE_ADDR"] unsere letzte Option für die IP. Nachdem wir die IP erhalten haben, validieren wir sie auch, um Qualität und Sicherheit zu gewährleisten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X