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.

1voto

Mohamad Hamouday Punkte 1396

Diese Funktion sollte wie erwartet funktionieren

function Get_User_Ip()
{
    $IP = false;
    if (getenv('HTTP_CLIENT_IP'))
    {
        $IP = getenv('HTTP_CLIENT_IP');
    }
    else if(getenv('HTTP_X_FORWARDED_FOR'))
    {
        $IP = getenv('HTTP_X_FORWARDED_FOR');
    }
    else if(getenv('HTTP_X_FORWARDED'))
    {
        $IP = getenv('HTTP_X_FORWARDED');
    }
    else if(getenv('HTTP_FORWARDED_FOR'))
    {
        $IP = getenv('HTTP_FORWARDED_FOR');
    }
    else if(getenv('HTTP_FORWARDED'))
    {
        $IP = getenv('HTTP_FORWARDED');
    }
    else if(getenv('REMOTE_ADDR'))
    {
        $IP = getenv('REMOTE_ADDR');
    }

    //If HTTP_X_FORWARDED_FOR == server ip
    if((($IP) && ($IP == getenv('SERVER_ADDR')) && (getenv('REMOTE_ADDR')) || (!filter_var($IP, FILTER_VALIDATE_IP))))
    {
        $IP = getenv('REMOTE_ADDR');
    }

    if($IP)
    {
        if(!filter_var($IP, FILTER_VALIDATE_IP))
        {
            $IP = false;
        }
    }
    else
    {
        $IP = false;
    }
    return $IP;
}

1voto

oriadam Punkte 6555

Hier ist ein einfacher Einzeiler

$ip = $_SERVER['HTTP_X_FORWARDED_FOR']?: $_SERVER['HTTP_CLIENT_IP']?: $_SERVER['REMOTE_ADDR'];

EDIT :

Der obige Code liefert möglicherweise reservierte Adressen (wie 10.0.0.1), eine Adressenliste aller unterwegs befindlichen Proxyserver, usw. Um diese Fälle zu behandeln, verwenden Sie den folgenden Code:

function valid_ip($ip) {
    // for list of reserved IP addresses, see https://en.wikipedia.org/wiki/Reserved_IP_addresses
    return $ip && substr($ip, 0, 4) != '127.' && substr($ip, 0, 4) != '127.' && substr($ip, 0, 3) != '10.' && substr($ip, 0, 2) != '0.' ? $ip : false;
}

function get_client_ip() {
    // using explode to get only client ip from list of forwarders. see https://en.wikipedia.org/wiki/X-Forwarded-For
    return
    @$_SERVER['HTTP_X_FORWARDED_FOR'] ? explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'], 2)[0] :
    @$_SERVER['HTTP_CLIENT_IP'] ? explode(',', $_SERVER['HTTP_CLIENT_IP'], 2)[0] :
    valid_ip(@$_SERVER['REMOTE_ADDR']) ?:
    'UNKNOWN';
}

echo get_client_ip();

-1voto

B.F. Punkte 453

Wie das Folgende?

if (($ip=filter_input(INPUT_SERVER, 'REMOTE_ADDR', validate_ip)) === false or empty($ip)) {
    exit;
}
echo $ip;

PS

if (($ip=filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP|FILTER_FLAG_NO_PRIV_RANGE|FILTER_FLAG_NO_RES_RANGE)) === false) {
    header('HTTP/1.0 400 Bad Request');
    exit;
}

Alle Header, die mit 'HTTP_' oder 'X-' beginnen, können gefälscht werden, bzw. sind benutzerdefiniert. Wenn Sie den Überblick behalten wollen, Cookies verwenden, etc.

-3voto

HRM Punkte 65

Um die IP-Adresse des Clients zu erhalten, verwenden Sie bitte getenv("REMOTE_ADDR") .

Zum Beispiel,

$ip_address = getenv("REMOTE_ADDR");
echo $ip_address;

Wenn Sie Ihren Server über localhost aufrufen, wird er Folgendes ausgeben ::1 . Rufen Sie also bitte Ihren Server mit der direkten Server-IP-Adresse oder Domäne auf.

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