2011-01-04 10 views
1

J'ai utilisé $ _SERVER ['REMOTE_ADDR'] et il renvoie l'adresse IP du client (adresse IP à partir de laquelle l'utilisateur consulte la page en cours) mais à présent (et même code) il renvoie adresse IP de l'hôte (j'ai vérifié l'adresse IP avec l'adresse IP). problème est avec l'hôte ou quoi? merci.

+6

Vous ne le visiteriez pas de votre hôte par hasard? – TJHeuvel

+0

Utilisez-vous une sorte de proxy? – Gumbo

+0

no. J'ai vérifié plusieurs fois. Je n'utilise pas de proxy – imez

Répondre

12

Vous devez d'abord demander HTTP_X_FORWARDED_FOR et si elle n'est pas affectée, utilisez REMOTE_ADDR.

+0

j'utilise HTTP_X_FORWARDED_FOR à l'heure actuelle et il renvoie l'adresse IP correcte. mais pourquoi problème avec REMOTE_ADDR? – imez

+0

Parce qu'il existe un proxy entre vous et le serveur et vous obtenez l'adresse du proxy en tant que REMOTE_ADDR. HTTP_X_FORWARDED_FOR est l'adresse IP du client utilisant le proxy. –

+0

@imez: Comme @Rosh a déjà souligné qu'il doit y avoir un proxy entre vous et le serveur et si vous interrogez 'REMOTE_ADDR' vous obtiendrez l'adresse IP du serveur proxy. Si vous vérifiez d'abord 'HTTP_X_FORWARDED_FOR ', alors le proxy remplira la plupart du temps l'adresse IP' real'. – James

2

Je dois mentionner que la clé du tableau est sensible à la casse et doit être en majuscules:

var_dump($_SERVER['remote_addr']); 
echo "\n"; 
var_dump($_SERVER['REMOTE_ADDR']); 

Sortie:

Notice: Undefined index: remote_addr in /home/adam/public_html/2011/01/04/foo.php on line 3 
NULL 

string(15) "10.0.1.51" 

je serais var_dump($_SERVER) juste pour évaluer l'état de votre monde, et partir de là.

+0

je n'ai pas changé de code perméable. – imez

+0

Plonger l'ensemble de $ _SERVER est une bonne idée - J'ai découvert la véritable adresse IP derrière un proxy avec lequel je travaille dans HTTP_CLIENT_IP de cette façon ... – ChrisV

4

de @ James

Par défaut, le client IP est en $ _SERVER [ 'REMOTE_ADDR de']. Lorsque l'utilisateur entre votre site à l'aide d'un serveur PROXY (passerelle HTTP), il vous indique à qui il envoie un proxy (HTTP_X_FORWARDED_FOR) et lui donne son propre proxy IP dans $ _SERVER ['REMOTE_ADDR'].

Les proxies anonymes omettent HTTP_X_FORWARDED_FOR ou vous mentent simplement. Savoir que vous avez un vrai client IP n'est pas possible.

+0

Je l'ai dit dans mon commentaire sur ma réponse. Ce n'est jamais une * garantie * que la vraie adresse IP est dans HTTP_X_FORWARDED_FOR mais comme je l'ai dit, la plupart du temps c'est. – James

+0

@James: Vous êtes juste plus rapide que moi ;-) - et corrigez –

+0

et si ça se passe sur localhost? comment sais-je que j'utilise proxy (que je n'utilise sûrement pas)? –

Questions connexes