Maison > développement back-end > Problème PHP > Que dois-je faire si l'IP obtenue par php est inexacte ?

Que dois-je faire si l'IP obtenue par php est inexacte ?

藏色散人
Libérer: 2023-03-08 08:56:02
original
2990 Les gens l'ont consulté

L'adresse IP inexacte obtenue par php peut être due au fait que l'utilisateur utilise un proxy, donc "$_SERVER['REMOTE_ADDR']" ne peut pas détecter la véritable adresse IP de l'utilisateur. La solution est de définir un "X-Forwarded-". Pour l'en-tête d'entité pour obtenir la véritable adresse IP.

Que dois-je faire si l'IP obtenue par php est inexacte ?

L'environnement d'exploitation de cet article : système Windows 7, PHP7.1, ordinateur Dell G3.

L'IP obtenue par php n'est pas réelle ?

Tout le monde, quelque chose m'est soudainement venu à l'esprit. Nous n'utilisons pas l'habituel $_SERVER['REMOTE_ADDR'] pour obtenir l'adresse IP intranet du serveur (très probablement l'adresse IP proxy du serveur). Il n'y a aucun problème avec ce code. Ensuite, nous utilisons un proxy inverse (nginx, etc.), et les utilisateurs peuvent également utiliser des proxys, donc un simple $_SERVER['REMOTE_ADDR'] ne peut pas détecter la véritable adresse IP de l'utilisateur.

Mais il existe un paramètre qui peut obtenir l'adresse réelle de l'utilisateur via l'adresse IP du proxy. Étendez le protocole HTTP. Un en-tête d'entité appelé X-Forwarded-For est défini.

Parce que nous considérons cela principalement pour les stars de la publicité, après tout, d'autres peuvent agir en tant qu'agents et augmenter les ventes.

[Recommandé : Tutoriel vidéo PHP]

Le code est le suivant :

//获取用户IP地址
    public function getIp()
    {
        if(!empty($_SERVER["HTTP_CLIENT_IP"]))
        {
            $cip = $_SERVER["HTTP_CLIENT_IP"];
        }
        else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        {
            $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        }
        else if(!empty($_SERVER["REMOTE_ADDR"]))
        {
            $cip = $_SERVER["REMOTE_ADDR"];
        }
        else
        {
            $cip = '';
        }
        preg_match("/[\d\.]{7,15}/", $cip, $cips);
        $cip = isset($cips[0]) ? $cips[0] : 'unknown';
        unset($cips);
        return $cip;
    }
Copier après la connexion

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!

Étiquettes associées:
php
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