黄片毛片在线看_天天操天天射天天爽_精品久久久久中文慕人妻 _青娱乐在线免费视频_青青草精品在线视频_日本中文字幕久久_亚洲国产欧美另类_伊人手机在线视频_天天综合永久入口_久久久综合久久

福州網(wǎng)站建設(shè)>網(wǎng)站新聞>php技術(shù)

PHP利用純真IP數(shù)據(jù)庫在本地實(shí)現(xiàn)IP地址信息查詢

發(fā)布日期:2019-12-17瀏覽次數(shù):2039 來源:福州網(wǎng)站建設(shè)

建議本地IP地址數(shù)據(jù)庫,請(qǐng)到http://www.cz88.net/這個(gè)網(wǎng)站下載一個(gè)純真IP數(shù)據(jù)庫,安裝完成后,到安裝目錄里把QQWry.dat文件取出來,這個(gè)就是我們想要的IP數(shù)據(jù)庫了,放到你想要目錄下。

正面這個(gè)IP地址查詢處理的類

 

<?php
 
/**
 * IP 地理位置查詢類
 */
class Helper_IpLocation
{
    /**
     * QQWry.Dat文件指針
     *
     * @var resource
     */
    private $fp;
    /**
     * 第一條IP記錄的偏移地址
     *
     * @var int
     */
    private $firstip;
    /**
     * 最后一條IP記錄的偏移地址
     *
     * @var int
     */
    private $lastip;
    /**
     * IP記錄的總條數(shù)(不包含版本信息記錄)
     *
     * @var int
     */
    private $totalip;
 
    /**
     * 構(gòu)造函數(shù),打開 QQWry.Dat 文件并初始化類中的信息
     *
     * @param string $filename
     */
    public function __construct($filename = 'qqwry.dat')
    {
        $this->fp = 0;
        if (($this->fp = fopen($filename, 'rb')) !== false) {
            $this->firstip = $this->getlong();
            $this->lastip = $this->getlong();
            $this->totalip = ($this->lastip - $this->firstip) / 7;
            //注冊(cè)析構(gòu)函數(shù),使其在程序執(zhí)行結(jié)束時(shí)執(zhí)行
            register_shutdown_function(array(
                &$this,
                '__destruct'
            ));
        }
    }
 
    /**
     * 析構(gòu)函數(shù),用于在頁面執(zhí)行結(jié)束后自動(dòng)關(guān)閉打開的文件。
     *
     */
    public function __destruct()
    {
        if ($this->fp) {
            fclose($this->fp);
        }
        $this->fp = 0;
    }
 
    /**
     * 返回讀取的長整型數(shù)
     *
     * @access private
     * @return int
     */
    private function getlong()
    {
        //將讀取的little-endian編碼的4個(gè)字節(jié)轉(zhuǎn)化為長整型數(shù)
        $result = unpack('Vlong', fread($this->fp, 4));
        return $result['long'];
    }
 
    /**
     * 返回讀取的3個(gè)字節(jié)的長整型數(shù)
     *
     * @access private
     * @return int
     */
    private function getlong3()
    {
        //將讀取的little-endian編碼的3個(gè)字節(jié)轉(zhuǎn)化為長整型數(shù)
        $result = unpack('Vlong', fread($this->fp, 3) . chr(0));
        return $result['long'];
    }
 
    /**
     * 返回壓縮后可進(jìn)行比較的IP地址
     *
     * @access private
     * @param string $ip
     * @return string
     */
    private function packip($ip)
    {
        // 將IP地址轉(zhuǎn)化為長整型數(shù),如果在PHP5中,IP地址錯(cuò)誤,則返回False,
        // 這時(shí)intval將Flase轉(zhuǎn)化為整數(shù)-1,之后壓縮成big-endian編碼的字符串
        return pack('N', intval(ip2long($ip)));
    }
 
    /**
     * 返回讀取的字符串
     *
     * @access private
     * @param string $data
     * @return string
     */
    private function getstring($data = "")
    {
        $char = fread($this->fp, 1);
        while (ord($char) > 0) { // 字符串按照C格式保存,以結(jié)束
            $data .= $char; // 將讀取的字符連接到給定字符串之后
            $char = fread($this->fp, 1);
        }
        return iconv('gbk', 'utf-8', $data);
    }
 
    /**
     * 返回地區(qū)信息
     *
     * @access private
     * @return string
     */
    private function getarea()
    {
        $byte = fread($this->fp, 1); // 標(biāo)志字節(jié)
        switch (ord($byte)) {
            case 0: // 沒有區(qū)域信息
                $area = "";
                break;
            case 1:
            case 2: // 標(biāo)志字節(jié)為1或2,表示區(qū)域信息被重定向
                fseek($this->fp, $this->getlong3());
                $area = $this->getstring();
                break;
            default: // 否則,表示區(qū)域信息沒有被重定向
                $area = $this->getstring($byte);
                break;
        }
        return $area;
    }
 
    /**
     * 根據(jù)所給 IP 地址或域名返回所在地區(qū)信息
     *
     * @access public
     * @param string $ip
     * @return array
     */
    public function getlocation($ip)
    {
        if (!$this->fp)
            return null; // 如果數(shù)據(jù)文件沒有被正確打開,則直接返回空
        $location['ip'] = gethostbyname($ip); // 將輸入的域名轉(zhuǎn)化為IP地址
        $ip = $this->packip($location['ip']); // 將輸入的IP地址轉(zhuǎn)化為可比較的IP地址
        // 不合法的IP地址會(huì)被轉(zhuǎn)化為255.255.255.255
        // 對(duì)分搜索
        $l = 0; // 搜索的下邊界
        $u = $this->totalip; // 搜索的上邊界
        $findip = $this->lastip; // 如果沒有找到就返回最后一條IP記錄(QQWry.Dat的版本信息)
        while ($l <= $u) { // 當(dāng)上邊界小于下邊界時(shí),查找失敗
            $i = floor(($l + $u) / 2); // 計(jì)算近似中間記錄
            fseek($this->fp, $this->firstip + $i * 7);
            $beginip = strrev(fread($this->fp, 4)); // 獲取中間記錄的開始IP地址
            // strrev函數(shù)在這里的作用是將little-endian的壓縮IP地址轉(zhuǎn)化為big-endian的格式
            // 以便用于比較,后面相同。
            if ($ip < $beginip) { // 用戶的IP小于中間記錄的開始IP地址時(shí)
                $u = $i - 1; // 將搜索的上邊界修改為中間記錄減一
            } else {
                fseek($this->fp, $this->getlong3());
                $endip = strrev(fread($this->fp, 4)); // 獲取中間記錄的結(jié)束IP地址
                if ($ip > $endip) { // 用戶的IP大于中間記錄的結(jié)束IP地址時(shí)
                    $l = $i + 1; // 將搜索的下邊界修改為中間記錄加一
                } else { // 用戶的IP在中間記錄的IP范圍內(nèi)時(shí)
                    $findip = $this->firstip + $i * 7;
                    break; // 則表示找到結(jié)果,退出循環(huán)
                }
            }
        }
        //獲取查找到的IP地理位置信息
        fseek($this->fp, $findip);
        $location['beginip'] = long2ip($this->getlong()); // 用戶IP所在范圍的開始地址
        $offset = $this->getlong3();
        fseek($this->fp, $offset);
        $location['endip'] = long2ip($this->getlong()); // 用戶IP所在范圍的結(jié)束地址
        $byte = fread($this->fp, 1); // 標(biāo)志字節(jié)
        switch (ord($byte)) {
            case 1: // 標(biāo)志字節(jié)為1,表示國家和區(qū)域信息都被同時(shí)重定向
                $countryOffset = $this->getlong3(); // 重定向地址
                fseek($this->fp, $countryOffset);
                $byte = fread($this->fp, 1); // 標(biāo)志字節(jié)
                switch (ord($byte)) {
                    case 2: // 標(biāo)志字節(jié)為2,表示國家信息又被重定向
                        fseek($this->fp, $this->getlong3());
                        $location['country'] = $this->getstring();
                        fseek($this->fp, $countryOffset + 4);
                        $location['area'] = $this->getarea();
                        break;
                    default: // 否則,表示國家信息沒有被重定向
                        $location['country'] = $this->getstring($byte);
                        $location['area'] = $this->getarea();
                        break;
                }
                break;
            case 2: // 標(biāo)志字節(jié)為2,表示國家信息被重定向
                fseek($this->fp, $this->getlong3());
                $location['country'] = $this->getstring();
                fseek($this->fp, $offset + 8);
                $location['area'] = $this->getarea();
                break;
            default: // 否則,表示國家信息沒有被重定向
                $location['country'] = $this->getstring($byte);
                $location['area'] = $this->getarea();
                break;
        }
        if ($location['country'] == " CZ88.NET") { // CZ88.NET表示沒有有效信息
            $location['country'] = "未知";
        }
        if ($location['area'] == " CZ88.NET") {
            $location['area'] = "";
        }
        return $location;
    }
}

調(diào)用方式:

<?php
 
include 'IpLocation.php';
 
echo "<pre>";   
$ip = "180.76.6.130";   
$iplocation = new IpLocation();   
$location = $iplocation->getlocation($ip);   
print_r($location);   
 

轉(zhuǎn)載地址:https://blog.csdn.net/myweishanli/article/details/45098693

以上是由福州網(wǎng)站建設(shè)的小編為你分享了"PHP利用純真IP數(shù)據(jù)庫在本地實(shí)現(xiàn)IP地址信息查詢"文章,如果你在這方面有什么問題,隨時(shí)聯(lián)系我們

php技術(shù)有關(guān)的文章
如果您有什么問題,歡迎咨詢我們客服! 點(diǎn)擊QQ咨詢
黄片毛片在线看_天天操天天射天天爽_精品久久久久中文慕人妻 _青娱乐在线免费视频_青青草精品在线视频_日本中文字幕久久_亚洲国产欧美另类_伊人手机在线视频_天天综合永久入口_久久久综合久久
欧美中文字幕一区二区三区亚洲| 在线观看视频91| 欧美伦理影视网| 欧美一区二区三区视频免费播放| 久久五月婷婷丁香社区| 久久一二三国产| 日韩有码一区二区三区| 欧美精品一区男女天堂| 亚洲区小说区图片区qvod| 亚洲天堂中文字幕| 日产精品久久久久久久性色| 国产一区二区三区香蕉 | 精品日韩一区二区| 久久色.com| 国产精品入口麻豆原神| 亚洲欧美电影一区二区| 香蕉av福利精品导航| 久久国产夜色精品鲁鲁99| 国产suv精品一区二区6| 在线免费亚洲电影| 久久亚洲一级片| 亚洲一区二区在线视频| 国产精品一级黄| 欧美日韩高清一区| 中文在线资源观看网站视频免费不卡| 日韩毛片视频在线看| 麻豆视频一区二区| 一本色道久久综合亚洲91| 91精品免费在线观看| ...中文天堂在线一区| 美女精品一区二区| 成人国产精品免费网站| 欧美日本乱大交xxxxx| 国产欧美一区二区精品秋霞影院| 亚洲自拍欧美精品| 99免费精品视频| 国产亚洲美州欧州综合国| 亚洲成人激情综合网| 成人a区在线观看| 国产精品高潮呻吟| 五月综合激情日本mⅴ| 国产伦精一区二区三区| 91精品国产综合久久精品| 1区2区3区欧美| 国产成人一级电影| 国产亚洲精品久| 国产伦精品一区二区三区免费| 欧美日韩精品一区二区三区| 亚洲视频一二三| 91在线视频观看| 国产精品高潮呻吟久久| 大陆成人av片| 最近日韩中文字幕| 99国产精品国产精品毛片| 国产精品毛片无遮挡高清| 国产宾馆实践打屁股91| 国产精品免费丝袜| 99re视频这里只有精品| 一区二区三区四区亚洲| 欧美在线观看一区二区| 视频在线观看一区| 日韩写真欧美这视频| 免播放器亚洲一区| 欧美刺激脚交jootjob| 国产主播一区二区| 亚洲国产高清在线观看视频| 精品午夜久久福利影院| 国产视频一区二区在线| 91影视在线播放| 曰韩精品一区二区| 欧美日韩国产欧美日美国产精品| 另类调教123区| 久久精品一区二区三区av | 伊人开心综合网| 在线观看不卡视频| 久久精品国产在热久久| 中文av一区二区| 欧美曰成人黄网| 国内久久精品视频| 一区二区三区在线免费播放 | 欧美日本精品一区二区三区| 秋霞午夜av一区二区三区| 国产婷婷一区二区| 欧美曰成人黄网| 国产成人午夜99999| 亚洲综合男人的天堂| 欧美精品一区二区高清在线观看 | 欧美一级免费观看| 国产a级毛片一区| 视频一区中文字幕| 成人欧美一区二区三区视频网页| 欧美日韩久久久| av在线这里只有精品| 午夜精品成人在线视频| 国产精品久久久久影视| 日韩精品一区二区三区在线播放| 成人午夜私人影院| 久久精品国产亚洲一区二区三区| 一区二区中文字幕在线| 久久久综合视频| 91.成人天堂一区| 91久久免费观看| eeuss影院一区二区三区| 老色鬼精品视频在线观看播放| 亚洲免费电影在线| **欧美大码日韩| 久久精品夜色噜噜亚洲aⅴ| 69久久夜色精品国产69蝌蚪网| 高清不卡一区二区在线| 久久精品国产澳门| 久久国产精品第一页| 亚洲你懂的在线视频| 久久精品视频免费观看| wwww国产精品欧美| 精品1区2区在线观看| 日韩欧美高清在线| 9191国产精品| 欧美一级在线观看| 日韩欧美国产一区二区在线播放| 色婷婷久久久久swag精品| 成人禁用看黄a在线| 播五月开心婷婷综合| 97久久超碰国产精品电影| 一本久久a久久免费精品不卡| 色呦呦国产精品| 色综合久久综合中文综合网| 99视频超级精品| 在线观看一区日韩| 69久久99精品久久久久婷婷 | 在线观看91视频| 欧美日韩视频在线一区二区| 欧美视频中文字幕| 5566中文字幕一区二区电影 | 欧美变态tickling挠脚心| 91精品国产色综合久久不卡电影 | 国产米奇在线777精品观看| 国产乱子伦视频一区二区三区 | 欧美精品久久久久久久多人混战 | 一本色道久久综合亚洲精品按摩| 色综合久久久久综合体桃花网| 欧美亚洲自拍偷拍| 精品福利二区三区| 久久精品一区四区| 亚洲国产成人高清精品| 国产91色综合久久免费分享| 在线观看网站黄不卡| 色一情一伦一子一伦一区| 欧美一二三四区在线| 国产精品久久毛片| 蜜臀久久久久久久| 99精品视频在线观看| 日韩视频免费观看高清完整版| 欧美激情自拍偷拍| 欧美激情一区二区三区不卡 | 视频在线观看一区| 91丨porny丨首页| 久久精品亚洲精品国产欧美kt∨| 亚洲国产日韩综合久久精品| 国产经典欧美精品| 欧美一区二区视频在线观看| 国产精品久久久久一区| 免费观看30秒视频久久| av中文字幕不卡| 日韩欧美成人激情| 五月天激情综合网| av亚洲精华国产精华| 久久视频一区二区| 欧美aⅴ一区二区三区视频| 91国产丝袜在线播放| 欧美国产禁国产网站cc| 美女国产一区二区| 日韩欧美美女一区二区三区| 综合激情成人伊人| 不卡一二三区首页| 国产精品色哟哟| 国产成人精品影视| 国产色综合久久| 国产成人av影院| 国产欧美日韩精品一区| 国产综合色在线视频区| 久久综合九色综合欧美就去吻| 美女视频一区在线观看| 欧美丰满少妇xxxxx高潮对白| 成人欧美一区二区三区视频网页| 99久久国产综合精品麻豆 | 中文字幕不卡一区| 国产成人精品免费视频网站| 久久青草欧美一区二区三区| 国产精品一区二区久激情瑜伽| 久久日韩粉嫩一区二区三区| 国产v综合v亚洲欧| 国产精品免费久久| 色综合色狠狠天天综合色| 一二三四社区欧美黄| 欧美精品丝袜中出| 激情五月激情综合网| 国产拍欧美日韩视频二区| 91国产免费观看| 国产精品系列在线观看| 亚洲小少妇裸体bbw|