Bonjour a tous !

Je souhaite récupérer l'addresse IP de mes visiteurs, plus précisements de l'administrateur du site lorsque il se connecte.

Alors je sait que l'on peu le faire comme ceci :

$_SERVER['REMOTE_ADDR']

Comme l'explique PHP.net

'REMOTE_ADDR'
Retourne L'adresse IP du client qui demande la page courante.

Par contre moi sa me retoure pas l'IP du client (donc le visiteur) mais l'IP du serveur, donc de l'hebergeur. Pour info mon site est en ligne. J'ai testé ca depuis mon ordinateur et sur mon iPhone qui n'est pas connecté au même réseau WIFI, pourtant sur les deux sa me retroune la meme IP : celle du serveur de l'hebergeur.

Alors j'ai cherché un peu et apparement je peut faire ca :

$_SERVER['HTTP_X_FORWARDED_FOR']

Dans ce cas ca me retourne bien des IP différentes. Mais comme je vient de découvrir cette possiblité je voulais voir avec vous si c'est la bonne solution ? Es ce que ca me retourne bien l'IP du visiteur ?

Merci d'avance pour votre aide :)

6 réponses


GregWoot
Réponse acceptée

Apparemment, pas mal de variables permettent de récupérer cette informations.
J'ai déjà utilisé ce code et cela fonctionnait :

$ipaddress = '';
            if ($_SERVER['HTTP_CLIENT_IP'])
                $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
            else if ($_SERVER['HTTP_X_FORWARDED_FOR'])
                $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
            else if ($_SERVER['HTTP_X_FORWARDED'])
                $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
            else if ($_SERVER['HTTP_FORWARDED_FOR'])
                $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
            else if ($_SERVER['HTTP_FORWARDED'])
                $ipaddress = $_SERVER['HTTP_FORWARDED'];
            else if ($_SERVER['REMOTE_ADDR'])
                $ipaddress = $_SERVER['REMOTE_ADDR'];
            else
                $ipaddress = 'UNKNOWN';

Comme ça ?

<?php
if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
?>

Nicolas Groelly, GregWoot

Merci pour vos réponses.

Je n'avait pas pensé à faire une condition, c'est pas bête du tout. Par contre faut pas que je mette REMOTE_ADDR, parce que ca me retourne pas la bonne IP du client.

Mais sinon que retourne ceci :

$_SERVER['HTTP_FORWARDED_FOR']

Car ca me retourne bien des numéros différents mais finalement je ne sais pas à quoi ils correspondent. C'est donc bien l'IP ? Sur PHP.net sur la liste des parametres de $_SERVER il n'y à pas celle ci.

Cette variable est souvent ajouté quand on utilise des proxys ou des loadbalancer

Il y a différentes IP qui peuvent demander une p: celle du proxy qui demande la page, celle du client qui demande directement la page. Et je crois que c'est tout.