在 PHP 中确定客户端的 IP 地址
PHP 超全局数组 $_SERVER 提供对各种服务器相关信息的访问,包括客户端的远程信息通过 $_SERVER['REMOTE_ADDR'] 的 IP 地址。但这种方法在特定场景下可能会存在不足。
如果 $_SERVER['REMOTE_ADDR'] 值不正确,可以使用替代服务器变量来准确获取 IP 地址。下面探讨两种方法:
使用 getenv() 函数:
getenv() 函数检索环境变量的值。它可以用来获取客户端的 IP 地址,如下所示:
function get_client_ip() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'UNKNOWN'; return $ipaddress; }
使用 $_SERVER 超全局数组:
$_SERVER 数组包含 HTTP 请求信息。以下代码演示了其在获取 IP 地址方面的用途:
function get_client_ip() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; }
两种方法都提供相同的功能,但访问信息的方式有所不同。
以上是PHP如何准确判断客户端IP地址?的详细内容。更多信息请关注PHP中文网其他相关文章!