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 ?

藏色散人
藏色散人original
2021-02-24 10:03:572991parcourir

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;
    }

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