Maison >développement back-end >Problème PHP >Comment résoudre l'erreur d'obtention de l'adresse IP du client en php
Dans le processus de programmation PHP, l'obtention de l'adresse IP du client est une exigence très courante. L’obtention de l’adresse IP du client n’est pas simple et des erreurs peuvent facilement survenir. Aujourd'hui, nous allons discuter des erreurs courantes.
Erreur 1 : Utilisation de $_SERVER['REMOTE_ADDR']
Les débutants peuvent utiliser cette variable commune pour obtenir l'adresse IP du client :
$ip = $_SERVER['REMOTE_ADDR'];
Cette méthode peut en effet obtenir l'IP du client, mais lorsque le client passe Lorsqu'elle est accessible par un proxy serveur, cette variable renvoie l'adresse IP du serveur proxy, pas la véritable IP du client.
Erreur 2 : réutiliser $_SERVER['REMOTE_ADDR']
Une autre erreur consiste à réutiliser la variable $_SERVER['REMOTE_ADDR'], c'est-à-dire à l'obtenir plusieurs fois. Cette méthode renverra généralement la même adresse IP car $_SERVER['REMOTE_ADDR'] est défini lors du traitement de la demande.
$ip = $_SERVER['REMOTE_ADDR']; $ip2 = $_SERVER['REMOTE_ADDR'];
Erreur 3 : obtenir des informations d'en-tête erronées
Vous pouvez afficher les informations d'en-tête de la requête en visitant l'adresse suivante :
http://httpbin.org/headers
Dans de nombreux didacticiels, les utilisateurs utilisent HTTP_X_FORWARDED_FOR ou HTTP_CLIENT_IP pour obtenir le adresse IP du client. Toutefois, cette approche n'est pas optimale car différents serveurs proxy peuvent utiliser différents identifiants pour la livraison.
Cela nécessite d'utiliser la bonne adresse IP du serveur proxy dans le fichier de configuration du serveur pour garantir une récupération fiable de l'adresse IP du client. Veuillez consulter le code ci-dessous pour la méthode spécifique :
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; }
Erreur quatre : Obtenir une erreur de protocole derrière un serveur proxy
Si vous travaillez derrière un serveur proxy et souhaitez détecter si le protocole HTTP est http ou https en PHP, vous pouvez utilisez le code suivant :
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) { $protocol = 'https://'; } else { $protocol = 'http://'; }
Erreur cinq : erreur d'obtention de l'IP sur le serveur IIS
Si vous travaillez sur le serveur IIS, lorsque vous utilisez $_SERVER['REMOTE_ADDR'] pour obtenir l'adresse IP du client, l'erreur suivante peut apparaître :
$_SERVER['REMOTE_ADDR'] returns 127.0.0.1 in IIS for local requests
Résoudre ceci Encore une fois, il existe de nombreuses façons de résoudre le problème, la première consiste à utiliser le code suivant :
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $ip = array_shift($ip); } else { $ip = $_SERVER['REMOTE_ADDR']; }
Résumé
Obtenir correctement l'adresse IP du client peut être un casse-tête, mais lorsqu'il s'agit de données sensibles, c'est crucial. Les erreurs ci-dessus ne représentent qu'une petite partie des problèmes qui peuvent survenir quotidiennement, mais nous pouvons éviter ces problèmes en maîtrisant les méthodes appropriées et en utilisant les fichiers de configuration du serveur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!