当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    php 获取本机外网/公网IP的代码

    栏目:win服务器问题汇总 时间:2019-12-05 21:54

    大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,

    但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。

    经过我的研究有两种方法来获取用户的真实外网IP。


    方法一:curl
    复制代码 代码如下:
    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];
    }



    方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址
    复制代码 代码如下:
    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;
    }