Heim  >  Artikel  >  Backend-Entwicklung  >  PHP erhält die echte IP des Benutzers

PHP erhält die echte IP des Benutzers

WBOY
WBOYOriginal
2016-08-08 09:19:535044Durchsuche

Während eines Interviews vor ein paar Tagen wurde ich gefragt, was das Problem mit der IP-Adresse sein würde, die über $_SERVER['SERVER_ADDR'] erhalten wurde? Es muss sein, „wenn der Benutzer die echte IP-Adresse nicht über einen Proxy erhalten kann“. Glücklicherweise stellte der Interviewer keine weiteren Fragen. Wie erhalte ich also die tatsächliche IP-Adresse des Benutzers?

Analyse

Heutzutage wählen sich viele Benutzer nicht direkt ein, um auf das Internet zuzugreifen, sondern greifen über Router oder andere Proxys auf das Netzwerk zu. Wenn wir die tatsächliche IP-Adresse des Clients des Benutzers erhalten möchten, können wir $_SERVER['SERVER_ADDR'] nicht direkt verwenden, da die auf diese Weise erhaltene IP-Adresse möglicherweise eine **LAN**-IP wie 192.168.1.99 und nicht die öffentliche IP des Benutzers ist Adresse .

Glücklicherweise fügt das Terminal X-Forwarded-For Header-Informationen zur HTTP-Anfrage hinzu, wenn unsere Zugriffsanfrage über das öffentliche Netzwerk-Routing oder den Proxy-Server läuft, und wir können diesen Anfrage-Header verwenden, um die tatsächliche Identität des zu erhalten Client. IP-Adresse.

Code

<code><span><span><?php</span><span>/**
 * 获取用户的真实ip地址
 *<span> @return</span> string
 */</span><span><span>function</span><span>get_client_ip</span><span>()</span>{</span><span>$headers</span> = <span>array</span>(<span>'HTTP_X_REAL_FORWARDED_FOR'</span>, <span>'HTTP_X_FORWARDED_FOR'</span>, <span>'HTTP_CLIENT_IP'</span>, <span>'REMOTE_ADDR'</span>);
    <span>foreach</span> (<span>$headers</span><span>as</span><span>$h</span>){
        <span>$ip</span> = <span>$_SERVER</span>[<span>$h</span>];
        <span>// 有些ip可能隐匿,即为unknown</span><span>if</span> ( <span>isset</span>(<span>$ip</span>) && strcasecmp(<span>$ip</span>, <span>'unknown'</span>) ){
            <span>break</span>;
        }
    }
    <span>if</span>( <span>$ip</span> ){
        <span>// 可能通过多个代理,其中第一个为真实ip地址</span><span>list</span>(<span>$ip</span>) = explode(<span>', '</span>, <span>$ip</span>, <span>2</span>);
    }
    <span>/* 如果是服务器自身访问,获取服务器的ip地址(该地址可能是局域网ip)
    if ('127.0.0.1' == $ip){
        $ip = $_SERVER['SERVER_ADDR'];
    }
    */</span><span>return</span><span>$ip</span>;
}
<span>?></span></span></code>

Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.

Das Obige stellt PHP vor, um die echte IP des Benutzers zu erhalten, einschließlich einiger Aspekte des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:ngx_listening_sNächster Artikel:ngx_listening_s