`
sinykk
  • 浏览: 357039 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

借用SINA IP地址库取用户所在城市及地区 PHP版

    博客分类:
  • php
阅读更多

<?php
/*$ip=real_ip();
$url='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='.$ip;
$content=fopen_url($url);
$Exp='/country":"(.*?)","province":"(.*?)","city":"(.*?)","district":"","isp":"(.*?)","type/s';
$content=unicodeDecode( $content );
if(preg_match($Exp,$content,$matche)){
echo 'Hello,来自'.$matche[1].$matche[2].$matche[3].'的朋友.';
}elseif(preg_match('/"ret":-1,"ip":"(.*?)"/',$content,$matche)){
echo '您使用的是局域网,局域网IP为'.$matche[1];
}else{
echo '你来自火星吧。';
}*/

/**
 *
 */
function ipFunGetCityNameById(){
    $url='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='.ipFunReal_ip();
    $content=ipFunFopen_url($url);
    $Exp='/country":"(.*?)","province":"(.*?)","city":"(.*?)","district":"","isp":"(.*?)","type/s';
    $content=ipFunUnicodeDecode( $content );
    if(preg_match($Exp,$content,$matche)){
        return $matche[3];
    }else
        return "";
}
 
 
//Curl 获取网址内容
function ipFunFopen_url($url)
{
    if (function_exists('file_get_contents')) {
        $file_content = @file_get_contents($url);
    } elseif (ini_get('allow_url_fopen') && ($file = @fopen($url, 'rb'))){
        $i = 0;
        while (!feof($file) && $i++ < 1000) {
            $file_content .= strtolower(fread($file, 4096));
        }
        fclose($file);
    } elseif (function_exists('curl_init')) {
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, $url);
        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2);
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($curl_handle, CURLOPT_FAILONERROR,1);
        curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Trackback Spam Check');
        $file_content = curl_exec($curl_handle);
        curl_close($curl_handle);
    } else {
        $file_content = '';
    }
    return $file_content;
}
 
function ipFunUnicodeDecode($content)
{
    // 转换编码,将Unicode编码转换gb2312编码
    $pattern = '/(\\\u([\w]{4}))/i';
    preg_match_all($pattern, $content, $matches);
    if (!empty($matches))
    {
        for ($j = 0; $j < count($matches[0]); $j++)
        {
            $str = $matches[0][$j];
            if (strpos($str, '\\u') === 0)
            {
                $code = base_convert(substr($str, 2, 2), 16, 10);
                $code2 = base_convert(substr($str, 4), 16, 10);
 
                $c = chr($code).chr($code2);
                $c=mb_convert_encoding($c, "UTF-8", 'UCS-2');
                //$c = iconv('UCS-2', 'gb2312', $c);
                $content=str_replace($matches[0][$j],$c,$content);
            }
            else
            {
                $content .= $str;
            }
        }
    }
    return $content;
}
 
function ipFunReal_ip()
{
    static $realip = NULL;
 
    if ($realip !== NULL)
    {
        return $realip;
    }
 
    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
 
            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
            foreach ($arr AS $ip)
            {
                $ip = trim($ip);
 
                if ($ip != 'unknown')
                {
                    $realip = $ip;
 
                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }
 
    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
 
    return $realip;
}

分享到:
评论

相关推荐

    IP 地址练习题

    - **题目解析**: 网络号标识了一个IP地址所在的网络,它决定了数据包应该如何路由才能到达目标主机。 **12. 子网掩码格式判断** - **题目解析**: 子网掩码用于标识网络地址和主机地址之间的边界。选项D (255.255....

    IP地址规划与分配

    通过借用IP地址的一部分作为子网掩码,可以创建多个子网。例如,一个24位(/24)子网掩码将从一个C类地址(255.255.255.0)中创建254个可用主机地址。 2. **CIDR(Classless Inter-Domain Routing)记法**:由于...

    IP地址划分教程

    在进行IP地址划分时,我们需要计算合适的子网位数,这取决于我们希望划分出多少个子网以及每个子网需要的主机数量。例如,如果初始网络有256个可用IP地址(/24子网掩码),我们可能需要划分成4个子网,每个子网至少...

    子网计算器IP地址计算器

    本软件“子网计算器IP地址计算器”是专为此目的设计的实用工具,可以帮助用户方便地进行IP地址和子网掩码的相关计算,简化网络配置工作。 IP地址(Internet Protocol Address)是互联网上每台设备的唯一标识,它由...

    IP地址分析工具VB源码

    子网划分是将一个大的IP地址空间划分为若干个较小的子网,通过借用高位的主机位来作为子网位,以减少路由表的大小并提高网络管理效率。 VB源码提供的IP地址分析工具正是针对这样的需求设计的。VB是一种面向对象的...

    IP地址练习,很好的练习题很全面

    IP地址是互联网上设备识别的关键标识,用于区分网络上的各个节点。本篇文章将详细解析IP地址的几个核心知识点,包括子网划分、子网掩码、网络地址、广播地址、主机数计算以及子网聚合。 1. **子网划分**: 在IP...

    IP地址合法性及子网判断(课程设计)

    在本课程设计中,主题聚焦于“IP地址合法性及子网判断”,这是一项涉及计算机网络基础知识的重要任务。IP地址是互联网上每个设备独一无二的身份标识,而子网则是将大的网络划分成若干个更小、独立的逻辑网络,以优化...

    PLC通信中的IP地址和子网掩码详解.docx

    在实际应用中,可能还需要使用到子网划分,通过借用主机地址的一部分作为子网地址,以进一步细分网络,提高IP地址的利用率。这涉及到更复杂的网络规划和配置,但同样基于IP地址和子网掩码的概念。 总的来说,理解并...

    IP地址管理与子网划分完整版.rar

    子网划分通过借用IP地址的一部分作为子网标识,剩下的部分作为主机标识。子网掩码是一个与IP地址相同位数的二进制数,用来区分哪些部分是网络地址,哪些是主机地址。例如,一个255.255.255.0的子网掩码对应于/24的...

    ip地址计算器,子网计算

    本软件“IP地址计算器”专为此目的设计,它能够帮助用户快速准确地进行IP地址相关的计算,包括确定IP地址的主机数、子网数以及IP网段。 首先,IP地址是互联网上设备的唯一标识,由32位二进制组成,通常分为四段,每...

    IP地址管理与子网划分pdf版本

    《IP地址管理与子网划分》是一本深入探讨网络IP地址管理和子网划分技术的专业书籍。书中详尽地阐述了IPv4与IPv6在地址管理方面的核心概念,为读者提供了全面的理解框架。以下是对该书内容的详细解读: 首先,IPv4是...

    IP地址与子网掩码IP地址与子网掩码

    在实际应用中,子网掩码和IP地址共同决定了设备所在的网络和主机标识,从而实现精确的数据包转发。 总的来说,IP地址与子网掩码是互联网通信的基础,它们确保了网络中设备的唯一标识和高效通信。随着网络规模的不断...

    子网掩码、ip地址、主机号、网络号、网络地址、广播地址

    子网掩码、IP地址、主机号、网络号、网络地址、广播地址是理解网络通信基础的关键概念。本文将深入解析这些概念,并结合实例说明它们的实际应用。 ### IP地址 IP地址是Internet Protocol Address的缩写,是互联网...

    计算机三级-第3章 IP地址及其规划

    计算机三级的第3章主要探讨了IP地址及其规划这一核心主题。IP地址是互联网协议的基础,它是32位二进制数字,通常被分为四个8位的字段,以点分十进制的形式表示,如x.x.x.x。这种表示方式方便人类记忆和处理。 在...

    IP地址管理与子网划分完整版

    子网划分是在原有IP地址的基础上,通过借用主机ID的一部分位来创建更多的子网,以解决网络规模扩大后IP地址不足的问题。它可以帮助我们更有效地管理网络,减少广播域,提高网络安全,并简化路由配置。子网掩码是进行...

    IP地址管理及子网划分

    基本的子网划分方法是通过借用IP地址的一部分作为子网标识,剩下的部分作为主机标识。 第2章 为定长掩码网络建立一个地址管理规划 在定长子网掩码(Classful Subnet Masking,CFSM)中,子网掩码的位数固定,与IP...

    IP地址和子网掩码的要点和计算实例

    ### IP地址和子网掩码的要点与计算实例 #### 实例1:理解IP地址与子网掩码 **知识点1:IP地址的基本结构** - **定义与组成**:IP地址是一个由32位二进制数组成的标识符,用于在网络中唯一地标识一台设备。通常将...

Global site tag (gtag.js) - Google Analytics