Pendant le développement de PHP, l'obtention de l'adresse IP réelle du visiteur est une exigence commune. Cependant, en raison de l'environnement du réseau complexe, l'acquisition d'adresses IP est souvent affectée par des facteurs tels que les serveurs proxy et l'équilibrage de la charge. Cet article explorera diverses façons d'obtenir une véritable propriété intellectuelle et d'utiliser des exemples de code pour aider les développeurs à obtenir correctement l'IP client.
L'en-tête de demande HTTP contient les informations IP du client et la variable la plus élémentaire est Remote_Addr , qui est utilisée pour enregistrer l'IP du client.
$ip = $_SERVER['REMOTE_ADDR'];
echo "IP Address: $ip";
Ce code peut sortir directement l'adresse IP du visiteur actuel, mais il convient de noter que la valeur de Remote_Addr peut être l'IP du serveur proxy ou de l'équilibreur de chargement, plutôt que la véritable IP du client.
Pour résoudre les problèmes causés par le proxy, de nombreux serveurs de proxy ajouteront des en-têtes HTTP à forwardage X pour enregistrer le vrai Client IP.
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
echo "IP Address: $ip";
Cependant, tous les agents ne passeront pas cet en-tête et peuvent être forgés et ne peuvent donc pas être entièrement invoqués.
Pour les environnements complexes, l'utilisation d'une bibliothèque de classe proxy PHP dédiée est un moyen efficace d'améliorer la précision de l'acquisition de l'IP. Ces bibliothèques de classe analyseront de manière approfondie diverses informations d'en-tête HTTP.
Si le site Web est déployé sous le proxy CloudFlare, vous pouvez utiliser la bibliothèque de classe correspondante pour obtenir avec précision la vraie IP:
require_once 'vendor/autoload.php';
use Cloudflare\IpRewrite;
$ipRewrite = new IpRewrite();
$ip = $ipRewrite->getIp();
echo "IP Address: $ip";
Cette bibliothèque garantit que l'adresse IP du client réel est obtenue en analysant les informations de l'en-tête spéciales de CloudFlare.
En plus de CloudFlare, il existe d'autres bibliothèques proxy open source, telles que JShrink / Proxy-Test, qui peuvent aider à analyser une variété d'en-têtes HTTP et à obtenir avec précision IP:
require_once 'vendor/autoload.php';
use JShrink\ProxyTest;
$proxyTest = new ProxyTest();
$ip = $proxyTest->getIp();
echo "IP Address: $ip";
L'obtention de la véritable propriété intellectuelle des visiteurs est une exigence commune dans le développement de PHP. Il est simple de lire directement Remote_Addr , mais il n'est pas suffisamment précis dans un environnement proxy. L'utilisation de l'en-tête X-Forwarded ou l'utilisation de la bibliothèque d'agents professionnels peut efficacement améliorer la précision. Lorsque vous utilisez des adresses IP, vous devez également faire attention à la protection de la confidentialité des utilisateurs et à l'utilisation de ces informations de manière raisonnable et légalement.