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.