中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php獲取訪客所在城市名稱代碼

發布時間:2020-07-17 16:14:30 來源:網絡 閱讀:1948 作者:gutaotao1989 欄目:web開發

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地址。


完整代碼:

<?php
error_reporting(0);
//獲取訪客真實IP
function getip()
{
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'];
}
return preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : 'unknown';
}
 
//===================================
//
// 功能:IP地址獲取真實地址函數
// 參數:$ip - IP地址
// 作者:[Discuz!] (C) Comsenz Inc.
//
//===================================
function convertip($ip) {
    //IP數據文件路徑
    $dat_path = './qqWry.dat';
 
    //檢查IP地址
    if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $ip)){
        return 'IP Address Error';
    }
 
    //打開IP數據文件
    if(!$fd = @fopen($dat_path, 'rb')){
        return 'IP date file not exists or access denied';
    }
 
    //分解IP進行運算,得出×××數
    $ip = explode('.', $ip);
    $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
 
    //獲取IP數據索引開始和結束位置
    $DataBegin = fread($fd, 4);
    $DataEnd = fread($fd, 4);
    $ipbegin = implode('', unpack('L', $DataBegin));
    if($ipbegin < 0) $ipbegin += pow(2, 32);
    $ipend = implode('', unpack('L', $DataEnd));
    if($ipend < 0) $ipend += pow(2, 32);
    $ipAllNum = ($ipend - $ipbegin) / 7 + 1;
 
    $BeginNum = 0;
    $EndNum = $ipAllNum;
 
    //使用二分查找法從索引記錄中搜索匹配的IP記錄
    while($ip1num>$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]."的朋友')";
?>


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃园市| 友谊县| 吴堡县| 青阳县| 武陟县| 都江堰市| 滁州市| 肇庆市| 行唐县| 高陵县| 榆中县| 台江县| 吉安县| 西乡县| 南汇区| 柳江县| 定襄县| 安化县| 子长县| 滨海县| 临澧县| 湟中县| 巍山| 锦州市| 苍山县| 合山市| 房产| 武邑县| 汉沽区| 安新县| 淳化县| 九龙县| 惠州市| 蓝山县| 荆州市| 扶沟县| 宁海县| 乌恰县| 阳江市| 台安县| 丰都县|