Maison  >  Article  >  développement back-end  >  Comment résoudre l'erreur d'obtention de l'adresse IP du client en php

Comment résoudre l'erreur d'obtention de l'adresse IP du client en php

PHPz
PHPzoriginal
2023-04-03 11:49:54785parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn