php--ip的处理

1、获取ip

/**获取请求ip**/
function _get_request_ip(){
    //strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $ip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
    return $res;
}

  

2、判断是否国内ip

/**
     * 使用淘宝接口 判断ip
     * @param $ip
     * @return bool
     */
    function judgeIpByTaobao($ip)
    {
        $url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
        $res = file_get_contents($url);
        if (!empty($res)) {
            $ipData = json_decode($res,true);
            if ($ipData['code']==0 && in_array($ipData['data']['country_id'],['CN','HK','TW'])) {
                return true;
            }
        }
        return false;
    }

  

3、怎么“越级”获取ip

当我们的服务器的接口需要获取终端ip,而对接我们的接口的是一个平台,我们采用方法1获取ip,只能获取到平台的ip。

解决方法:

方法1:接口是否form表单提交,这里我们采用方法1就能获取用户的ip (接口是真实处理的请求参数)

方法2:下游使用接口的方式,如curl或flie_get_contents()等方法,我们先将请求的参数在假接口(负责转发请求参数,以form表单的方式再提交到正式处理的接口)转发真处理

这两种方法,下游平台不能继续执行代码逻辑。需要我们异步回调给下游平台

方法3:下游平台获取用户ip,以参数的形式提交

posted @ 2019-07-06 02:30  PHPer100  阅读(506)  评论(0编辑  收藏  举报