php 获取外网真实IP的二种方法

发布时间:2019-09-12编辑:脚本学堂
在对方服务器使用了反向代理的情况下,用$_SERVER['REMOTE_ADDR']获取用户IP,那么HTTP头中REMOTE_ADDR就不是用户的地址,而是上一级代理的IP地址。

在对方服务器使用了反向代理的情况下,用$_SERVER['REMOTE_ADDR']获取用户IP,那么HTTP头中REMOTE_ADDR就不是用户的地址,而是上一级代理的IP地址
网上提供的解决方法很多,脚本学堂 之前也发过一些相关文章,大家可以看看:
php 获取客户端IP地址、地理信息、浏览器信息、本地真实IP的代码
php获取准确的客户端IP地址的代码
php获取客户端IP地址的四种方法
PHP获取真实的客户IP的方法

这里再为大家提供二种获取客户端真实IP的方法。

方法1:使用curl
 

复制代码 代码示例:
<?php
function get_onlineip() {
    $ch = curl_init('http://www.ip138.com/ip2city.asp');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $a  = curl_exec($ch);
    preg_match('/[(.*)]/', $a, $ip);
    return $ip[1];
 }
?>

方法2:使用$_SERVER['HTTP_X_FORWARDED_FOR']
 

复制代码 代码示例:
<?php
function get_onlineip() {
    $onlineip = '';
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $onlineip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $onlineip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $onlineip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $onlineip = $_SERVER['REMOTE_ADDR'];
    }
    return $onlineip;
}
?>