Maison > développement back-end > Problème PHP > 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
Libérer: 2023-04-03 13:38:02
original
909 Les gens l'ont consulté

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'];
Copier après la connexion

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'];
Copier après la connexion

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'];
}
Copier après la connexion

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://';
}
Copier après la connexion

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
Copier après la connexion

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'];
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal