php获取访客所在城市名称代码
admin
2023-06-24 08:21:56
0

php获取访客所在城市名称代码,采用纯真QQ IP数据库,想要使用最新版IP数据库可到纯真官网获取。

纯真IP数据库官网:http://www.cz88.net/

将下载的IP数据库文件替换压缩包中的qqwry.dat文件即可。

压缩包下载:php获取访客所在城市名称代码

代码如下:

$ip=getip();
$area=convertip($ip);
$city = explode(" ",$area); 
header('Content-type: text/javascript;charset=gb2312');
echo "document.write('".$city[0]."')";
//echo "document.write('您好,来自".$city[0]."的朋友')";


代码中封装了两个函数,分别是getip()和convertip($ip),其中getip()函数的功能是获取当前访客的IP地址,convertip($ip)函数为获取访客的所在地名称,传入的参数$ip为使用getip()获取到的IP地址。


完整代码:

$ipNum || $ip2num<$ipNum) {
        $Middle= intval(($EndNum + $BeginNum) / 2);
 
        //偏移指针到索引位置读取4个字节
        fseek($fd, $ipbegin + 7 * $Middle);
        $ipData1 = fread($fd, 4);
        if(strlen($ipData1) < 4) {
            fclose($fd);
            return 'System Error';
        }
        //提取出来的数据转换成长×××,如果数据是负数则加上2的32次幂
        $ip1num = implode('', unpack('L', $ipData1));
        if($ip1num < 0) $ip1num += pow(2, 32);
 
        //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环
        if($ip1num > $ipNum) {
            $EndNum = $Middle;
            continue;
        }
 
        //取完上一个索引后取下一个索引
        $DataSeek = fread($fd, 3);
        if(strlen($DataSeek) < 3) {
            fclose($fd);
            return 'System Error';
        }
        $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
        fseek($fd, $DataSeek);
        $ipData2 = fread($fd, 4);
        if(strlen($ipData2) < 4) {
            fclose($fd);
            return 'System Error';
        }
        $ip2num = implode('', unpack('L', $ipData2));
        if($ip2num < 0) $ip2num += pow(2, 32);
 
        //没找到提示未知
        if($ip2num < $ipNum) {
            if($Middle == $BeginNum) {
                fclose($fd);
                return 'Unknown';
            }
            $BeginNum = $Middle;
        }
    }
 
    //下面的代码读晕了,没读明白,有兴趣的慢慢读
    $ipFlag = fread($fd, 1);
    if($ipFlag == chr(1)) {
        $ipSeek = fread($fd, 3);
        if(strlen($ipSeek) < 3) {
            fclose($fd);
            return 'System Error';
        }
        $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
        fseek($fd, $ipSeek);
        $ipFlag = fread($fd, 1);
    }
 
    if($ipFlag == chr(2)) {
        $AddrSeek = fread($fd, 3);
        if(strlen($AddrSeek) < 3) {
            fclose($fd);
            return 'System Error';
        }
        $ipFlag = fread($fd, 1);
        if($ipFlag == chr(2)) {
            $AddrSeek2 = fread($fd, 3);
            if(strlen($AddrSeek2) < 3) {
                fclose($fd);
                return 'System Error';
            }
            $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
            fseek($fd, $AddrSeek2);
        } else {
            fseek($fd, -1, SEEK_CUR);
        }
 
        while(($char = fread($fd, 1)) != chr(0))
            $ipAddr2 .= $char;
 
        $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
        fseek($fd, $AddrSeek);
 
        while(($char = fread($fd, 1)) != chr(0))
            $ipAddr1 .= $char;
    } else {
        fseek($fd, -1, SEEK_CUR);
        while(($char = fread($fd, 1)) != chr(0))
            $ipAddr1 .= $char;
 
        $ipFlag = fread($fd, 1);
        if($ipFlag == chr(2)) {
            $AddrSeek2 = fread($fd, 3);
            if(strlen($AddrSeek2) < 3) {
                fclose($fd);
 
                return 'System Error';
            }
            $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
            fseek($fd, $AddrSeek2);
        } else {
            fseek($fd, -1, SEEK_CUR);
        }
        while(($char = fread($fd, 1)) != chr(0)){
            $ipAddr2 .= $char;
        }
    }
    fclose($fd);
 
    //最后做相应的替换操作后返回结果
    if(preg_match('/http/i', $ipAddr2)) {
        $ipAddr2 = '';
    }
    $ipaddr = "$ipAddr1 $ipAddr2";
    $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);
    $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
    $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
    if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
        $ipaddr = 'Unknown';
    }
 
    return $ipaddr;
}
$ip=getip();
$area=convertip($ip);
$city = explode(" ",$area); 
header('Content-type: text/javascript;charset=gb2312');
echo "document.write('".$city[0]."')";
//echo "document.write('您好,来自".$city[0]."的朋友')";
?>


相关内容

热门资讯

神二十一航天员张陆出舱,从太空... 据凤凰卫视报道,神舟二十一号航天员乘组5月29日乘坐神舟二十二號载人飞船返回地球。北京时间20时11...
5月30日、31日晚8点来京东... 又好又便宜的京东618将于5月30日晚8点正式开启,全品类现货开卖。5月30日、31日每晚8点,消费...
27国代表齐聚厦门!金砖国家新... 来源:中国制造 5月27日,由工业和信息化部、福建省人民政府共同主办2026金砖国家新工业革命伙伴...
奋进“十五五” 科技谱新篇 —... 2026年5月28日上午,由抚顺市科学技术协会、新抚区科技局、新抚区委宣传部、新抚区科学技术协会联合...
国家最新的“人口小普查”,揭开... 5月22日,国家统计局公布了2025年全国1%人口抽样调查主要数据。这是国家统计局于2025年开展的...
漯河创新“曲艺+短剧+漫画”模... 您的浏览器不支持 video 标签。防谣治谣,重在源头,贵在日常。漯河市委网信办打破传统说教,推出《...
凤凰晚报丨哈马斯加沙领导人,上... 今日人物【穆罕默德·奥达,“上任即被斩首”】奥达一直是哈马斯的活跃领导人,曾长期担任哈马斯核心战斗部...
国家知识产权局前局长田力普一行... 本报讯 (记者吴奕萱 见习记者王楠)5月29日,宁波均普智能制造股份有限公司(以下简称“均普智能”)...
向山、向海、向荒野|2026第... 2026第二届搜狐极限探索者大会,即将于6 月 6 日在北京盛大启幕。 这是一场属于探索者的年度盛宴...
巴斯勒相机维修BIP2-D13... 导语:在工业自动化设备运维中,工业相机作为视觉检测的核心部件,其稳定性直接影响产线效率。以巴斯勒BI...