web-dev-qa-db-fra.com

Obtenir l'adresse IP du client en utilisant PHP

Je souhaite obtenir l'adresse IP du client qui utilise mon site Web. J'utilise le super_global PHP $_SERVER:

$_SERVER['REMOTE_ADDR'];

Mais je vois que cela ne peut pas donner la bonne adresse IP en utilisant ceci. Je reçois mon adresse IP et vois qu'elle est différente de mon adresse IP. Je peux également voir mon adresse IP sur un site Web tel que:

http://whatismyipaddress.com/

Je colle l'adresse IP qui donne la fonction PHP, mais ce site Web ne donne aucun résultat à ce sujet. Comment ce problème survient-il et comment puis-je obtenir l'adresse IP du client?

187
user1752627

Le moyen le plus simple d’obtenir adresse IP du visiteur est d'utiliser les variables $_SERVER['REMOTE_ADDR'] ou $_SERVER['REMOTE_Host'].

Cependant, il arrive parfois que l'adresse IP correcte du visiteur ne soit pas renvoyée. Nous pouvons donc utiliser d'autres variables de serveur pour obtenir l'adresse IP.

Les deux fonctions ci-dessous sont équivalentes à la différence seulement comment et d'où les valeurs sont récupérées.

getenv () est utilisé pour obtenir la valeur d'une variable d'environnement en PHP.

// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

$ _SERVER est un tableau contenant les variables de serveur créées par le serveur Web.

// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}
336
Sivanesh Govindan

Dans PHP 5.3 ou supérieur, vous pouvez l'obtenir comme ceci:

$ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');
117
Michael
    $ipaddress = '';
    if ($_SERVER['HTTP_CLIENT_IP'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if ($_SERVER['HTTP_X_FORWARDED_FOR'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if ($_SERVER['HTTP_X_FORWARDED'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if ($_SERVER['HTTP_FORWARDED_FOR'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if ($_SERVER['HTTP_FORWARDED'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1')
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
1
Rene Berwanger