dat文件
qqwry
網上自己下載
class類文件
IpLocation
<?php
class IpLocation {
/**
* @var resource 指針
*/
private $fp;
/**
* 第一條IP記錄的偏移地址
* @var int
*/
private $firstip;
/**
* 最後一條IP記錄的偏移地址
* @var int
*/
private $lastip;
/**
* IP記錄的總條數(不包含版本信息記錄)
* @var int
*/
private $totalip;
/**
* 構造函數
* @param string $filename
* @return IpLocation
*/
public function __construct($filename = "qqwry
$this
if (($this
$this
$this
$this
}
}
/**
* 返回讀取的長整型數
* @access private
* @return int
*/
public function getlong() {
//將讀取的little
$result = unpack(
return $result[
}
/**
* 返回讀取的
*
* @access private
* @return int
*/
public function getlong
//將讀取的little
$result = unpack(
return $result[
}
/**
* 返回壓縮後可進行比較的IP地址
*
* @access private
* @param string $ip
* @return string
*/
public function packip($ip) {
// 將IP地址轉化為長整型數
// 這時intval將Flase轉化為整數
return pack(
}
/**
* 返回讀取的字符串
*
* @access private
* @param string $data
* @return string
*/
public function getstring($data = "") {
$char = fread($this
while (ord($char) >
$data
$char = fread($this
}
return mb_convert_encoding($data
}
/**
* 返回地區信息
*
* @access private
* @return string
*/
public function getarea() {
$byte = fread($this
switch (ord($byte)) {
case
$area = "";
break;
case
case
fseek($this
$area = $this
break;
default: // 否則
$area = $this
break;
}
return $area;
}
/**
* 根據所給 IP 地址或域名返回所在地區信息
* @access public
* @param string $ip
* @return array
*/
function getlocation($ip) {
if (!$this
$location[
$ip = $this
// 不合法的IP地址會被轉化為
// 對分搜索
$l =
$u = $this
$findip = $this
while ($l <= $u) { // 當上邊界小於下邊界時
$i = floor(($l + $u) /
fseek($this
$beginip = strrev(fread($this
// strrev函數在這裡的作用是將little
// 以便用於比較
if ($ip < $beginip) { // 用戶的IP小於中間記錄的開始IP地址時
$u = $i
}else{
fseek($this
$endip = strrev(fread($this
if ($ip > $endip) { // 用戶的IP大於中間記錄的結束IP地址時
$l = $i +
}else{ // 用戶的IP在中間記錄的IP范圍內時
$findip = $this
break; // 則表示找到結果
}
}
}
//獲取查找到的IP地理位置信息
fseek($this
$location[
$offset = $this
fseek($this
$location[
$byte = fread($this
switch (ord($byte)) {
case
$countryOffset = $this
fseek($this
$byte = fread($this
switch (ord($byte)) {
case
fseek($this
$location[
fseek($this
$location[
break;
default: // 否則
$location[
$location[
break;
}
break;
case
fseek($this
$location[
fseek($this
$location[
break;
default: // 否則
$location[
$location[
break;
}
if ($location[
$location[
}
if ($location[
$location[
}
return $location;
}
/**
* 析構函數
*
*/
function __desctruct() {
if ($this
fclose($this
}
$this
}
}
?>
這個也可以網上下載
執行文件
<?php
function getIpPlace(){
require_once("IpLocation
$ipfile = "qqwry
$iplocation = new IpLocation($ipfile); //new IpLocation($ipfile) $ipfile ip對應地區信息文件
$ipresult = $iplocation
return $ipresult;
}
print_r($getIpPlace()); //調用方法
?>
From:http://tw.wingwit.com/Article/program/PHP/201311/20884.html