導航:首頁 > 編程語言 > php純真ip庫

php純真ip庫

發布時間:2022-07-17 06:40:47

1. php根據ip地址查地區

自己以前做過一個程序 根據discuz裡面的ip查詢改的

/**
* ip地址所屬地區計算
* 修改自 discuz
* 使用dicuz tinyipdata數據文件
* 將一些英文提示修改為漢字
* $is_simple true的話顯示到市 false顯示到網通電信等等
******/

function convertip($ip,$is_simple=true,$ipfile='include/data/ip.dat') {

$return = '';

if( !file_exists($ipfile) ) $ipfile = '../'.$ipfile;

if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {

$iparray = explode('.', $ip);

if($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1] <= 31))) {
return '區域網';
} elseif($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255) {
return 'ERR';
} elseif($is_simple) {
return change_simply_area(convertip_tiny($ip, $ipfile));
}
else {
return convertip_tiny($ip, $ipfile);
}
}
}
/**
* 從ip文件得到ip所屬地區
*
* 過濾掉了具體的位置(如 網通/電信/**網吧) 基本到市
***/
function convertip_tiny($ip, $ipdatafile) {

static $fp = NULL, $offset = array(), $index = NULL;

$ipdot = explode('.', $ip);
$ip = pack('N', ip2long($ip));

$ipdot[0] = (int)$ipdot[0];
$ipdot[1] = (int)$ipdot[1];

if($fp === NULL && $fp = @fopen($ipdatafile, 'rb')) {
$offset = unpack('Nlen', fread($fp, 4));
$index = fread($fp, $offset['len'] - 4);
} elseif($fp == FALSE) {
return '- Invalid IP data file';
}

$length = $offset['len'] - 1028;
$start = unpack('Vlen', $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);

for ($start = $start['len'] * 8 + 1024; $start < $length; $start += 8) {

if ($index{$start} . $index{$start + 1} . $index{$start + 2} . $index{$start + 3} >= $ip) {
$index_offset = unpack('Vlen', $index{$start + 4} . $index{$start + 5} . $index{$start + 6} . "\x0");
$index_length = unpack('Clen', $index{$start + 7});
break;
}
}

fseek($fp, $offset['len'] + $index_offset['len'] - 1024);
if($index_length['len']) {
return mb_convert_encoding(fread($fp, $index_length['len']),'utf-8','gb2312'); //將讀出的gb編碼數據轉成utf-8並返回
} else {
return '未知';
}

}

function change_simply_area($area) {
$tmp = explode(' ',$area); //過濾掉一些具體信息
return $tmp[0];
}

裡面那個ipfile你可以去下載一個discuz 在 ipdata目錄裡面有wry.dat的文件就是了 其實這個就是網上用的最多的那個純真版資料庫 很多顯示ip的qq用的也是那個
這兩個函數的原型參考 discuz 裡面 include\misc.func.php
共同學習進步 :)

2. PHP獲取IP同時獲取所在地區

需要用IP資料庫或者在線IP查詢服務。
國內的用純真資料庫(免費)
http://www.65536.cn/work/2008/MobileIPquery/qqwry.htm
國外的用Maxmind資料庫(這個要收費)

3. php如何實現根據IP自動跳轉首頁

既然你的公司已經做到全國各地了,還稀罕伺服器,做個分流就可以了。

4. 純真ip資料庫修改工具

首先,打開include/misc.func.php 找到 if(!$fd = @fopen($ipdatafile)) { 改為 if(!$fd = @fopen($ipdatafile, 'rb')) { 官方的文件里少了「rb」這個參數,也就是以二進制的方式打開 wry.dat 然後上傳wry.dat 這部完成,可以讀取純真的資料庫了,但是中文顯示全部是亂碼,就要進行第二步 找到代碼 return '- '.$ipaddr; 改為 return mb_convert_encoding($ipaddr,"utf-8","gb2312"); 現在能正確顯示純真的IP了

5. 如何在QQ珊瑚蟲中使用用純真IP資料庫

將純真的IP文件改名為CoralWry.dat,然後復制到QQ的安裝文件夾中就可以了.

6. 純真ip資料庫怎麼用 (詳細點的)

你是使用php來讀取資料庫的嗎?

如果是的話,那麼,你把下面的這個類保存成一個文件:

————————————————————
<?php

/**
* IP 地理位置查詢類
*
* @author joyphper
* @version 1.0
* @right 2010 joyphper.net
*/
class ip_area {

/**
*
*
* @var resource
*/
private $fp;//IP庫文件指針 resource
private $firstip;//第一條IP記錄的偏移地址 int
private $lastip;//最後一條IP記錄的偏移地址 int
private $totalip;//IP記錄的總條數(不包含版本信息記錄) int

/**
* 構造函數,打開 QQWry.Dat 文件並初始化類中的信息
*
* @param string $filename
* @return IpLocation
*/
public function __construct($filename = "data/ipdb.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;//注冊析構函數,使其在程序執行結束時執行
register_shutdown_function(array(&$this, '__destruct'));
}
}

/**
* 析構函數,用於在頁面執行結束後自動關閉打開的文件。
*
*/
public function __destruct() {
if ($this->fp) {
fclose($this->fp);
}
$this->fp = 0;
}

/**
* 返回讀取的長整型數
*
* @access private
* @return int
*/
private function getlong() {//將讀取的little-endian編碼的4個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}

/**
* 返回讀取的3個位元組的長整型數
*
* @access private
* @return int
*/
private function getlong3() {//將讀取的little-endian編碼的3個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}

/**
* 返回壓縮後可進行比較的IP地址
*
* @access private
* @param string $ip
* @return string
*/
private function packip($ip) {// 將IP地址轉化為長整型數,如果在PHP5中,IP地址錯誤,則返回False,// 這時intval將Flase轉化為整數-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格式保存,以\0結束
$data .= $char;// 將讀取的字元連接到給定字元串之後
$char = fread($this->fp, 1);
}
return $data;
}

/**
* 返回地區信息
*
* @access private
* @return string
*/
private function getarea() {
$byte = fread($this->fp, 1);// 標志位元組
switch (ord($byte)) {
case 0:// 沒有區域信息
$area = "";
break;
case 1:
case 2:// 標志位元組為1或2,表示區域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default:// 否則,表示區域信息沒有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}

/**
* 根據所給 IP 地址或域名返回所在地區信息
*
* @access public
* @param string $ip
* @return array
*/
public function get($ip) {
if (!$this->fp) return null;// 如果數據文件沒有被正確打開,則直接返回空
$location['ip'] = gethostbyname($ip); // 將輸入的域名轉化為IP地址
$ip = $this->packip($location['ip']); // 將輸入的IP地址轉化為可比較的IP地址
// 不合法的IP地址會被轉化為255.255.255.255// 對分搜索
$l = 0;// 搜索的下邊界
$u = $this->totalip;// 搜索的上邊界
$findip = $this->lastip;// 如果沒有找到就返回最後一條IP記錄(QQWry.Dat的版本信息)
while ($l <= $u) {// 當上邊界小於下邊界時,查找失敗
$i = floor(($l + $u) / 2); // 計算近似中間記錄
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4));// 獲取中間記錄的開始IP地址// strrev函數在這里的作用是將little-endian的壓縮IP地址轉化為big-endian的格式// 以便用於比較,後面相同。
if ($ip < $beginip) {// 用戶的IP小於中間記錄的開始IP地址時
$u = $i - 1;// 將搜索的上邊界修改為中間記錄減一
}else{
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 獲取中間記錄的結束IP地址
if ($ip > $endip) {// 用戶的IP大於中間記錄的結束IP地址時
$l = $i + 1;// 將搜索的下邊界修改為中間記錄加一
}else{// 用戶的IP在中間記錄的IP范圍內時
$findip = $this->firstip + $i * 7;
break;// 則表示找到結果,退出循環
}
}
}//獲取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用戶IP所在范圍的開始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong());// 用戶IP所在范圍的結束地址
$byte = fread($this->fp, 1);// 標志位元組
switch (ord($byte)) {
case 1:// 標志位元組為1,表示國家和區域信息都被同時重定向
$countryOffset = $this->getlong3();// 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1);// 標志位元組
switch (ord($byte)) {
case 2:// 標志位元組為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:// 標志位元組為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'] = "";
}
$location['country']=iconv('gbk', 'utf-8', $location['country']);
$location['area']=iconv('gbk', 'utf-8', $location['area']);
return $location;
}
}
?>
——————————————

這個類里有個引入資料庫的行,需要你進行更改。

接下來,你在需要使用IP資料庫的頁面中,將這個類引入,並執行下列函數:

$ip = new ip_area();

這個類不用傳參,自會得到ip的地理位置。

最後,如果你想得到IP值,那麼可以使用以下方法:

————————

function ip(){//-------------------------------------------獲得用戶IP;
if(isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip=$_SERVER["HTTP_X_FORWARDED_FOR"];
}elseif(isset($_SERVER["HTTP_CLIENT_IP"])){
$realip=$_SERVER["HTTP_CLIENT_IP"];
}else{
$realip=$_SERVER["REMOTE_ADDR"];
}
}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");
}
}
return $realip;
}

——————————————————————

7. 我想把純真版ip資料庫導入到sql資料庫中,但是我如何把ip的格式生成十進制的一些字元串在線等..

192.168.1.142轉換成125454564?你這是什麼加密演算法哦?

192.168.1.142轉換為整數形式應該是3232235918
吧。計算方法是192*256*256*256 + 168*256*256 + 1*256 + 142

知道了上面的計算過程,你應該可以轉換了吧。

不同語言寫的語句稍微有區別,核心的演算法就是上面的計算方法。

如果你想用SQL語句實現,可能稍微有點麻煩,一個思路是先把192.168.1.142轉換到四個欄位上,然後再用四個整數欄位的值計算最後的值。

8. Discuz、Phpwind和Spacebuilder,哪一個好用

discuz缺點:

不能批量編輯用戶,如不能批量移動到指定用戶組。

帖間隨機廣告代碼不能「每條隨機廣告一行,用回車分開」。

沒有「沉底」功能。

沒有道具,用戶不能自行改名。

不能批量刪除某個用戶若干天內的所有回復或主題。

優點:

discuz免費。

使用快速回復框時不會說「您提交的參數錯誤。請仔細閱讀論壇幫助文件,確保您有相應的操作許可權。」

不會因為css代碼下載不完全而導致版面格式混亂。

積分、用戶組、發帖數級別設置更靈活。

比asp+access版論壇更節約空間。轉換後資料庫大小隻有動網Access資料庫的三分之一。

速度快。

可以匿名發帖。

可以設置昵稱。

可以直接使用純真IP庫。

後台設置簡單明了。

可以「用戶欄目定製」。

可以「合並用戶」。

可以在後台直接更改用戶名。

頁面上下都有頁碼,方便翻頁。

可以前台批量操作。

不會多重引用。

用戶編輯帖子可以自己更改主題分類。

phpwind特點:

獨創、成熟

phpwind獨創的技術架構和程序設計,獲得國家專利認證,從根基著手塑造快速、穩健、可擴展的論壇程序。7年礪煉,在用戶需求基礎上進行不斷創新與完善,無論企業還是娛樂,全面滿足論壇建設。

安全

高效防護演算法、程序監控技術、注入式入侵過濾技術、防CC攻擊技術、安全驗證機制構築的站點安全體系,將風險防患於未然

快捷、穩定、高效

核心參數的合理配置、負載均衡處理技術、資料庫分表技術、文件讀寫穩定性演算法幫助您最大限度地節省硬體資源,保障站點在伺服器繁忙時快速穩定運行。

不僅為站長而設計

站長建站,影響的卻是網民。PHPWind「不僅為站長而設計」的設計理念,將人性化融入論壇功能的點點滴滴。清晰的用戶等級與許可權設置,便捷完整的論壇功能與管理操作,詳細地日誌與統計記錄,集成交易與支付,輕松備份/恢復數據給予站長和每一位會員良好的用戶體驗。

可擴展

開源、規范化的代碼編寫、標准化的插件介面和清晰簡潔的模板體系理念,讓站點無限延伸至未來。

完美整合

PHPWind所取得的同業合作,為您提供更多建站軟體選擇和無間隙的軟體服務,幫助站點多面需求。查看詳情

豐富的第三方資源

近千款風格,近百款插件,仍在不斷豐富。查看詳情

操作系統要求

PHPWind具備跨平台特性,支持 Linux/Unix及Windows 2000/2003/ XP等操作系統。

針對上述操作系統,我們隊軟體做了大量的測試和實地檢驗,保證PHPWind可以安全穩定的運行,但您仍需做好伺服器操作系統的安全防備措施,例如Windows用戶需更改MYSQL的初始密碼,使用較新的穩定的軟體版本等。

語言及資料庫支撐環境要求可用的 web 伺服器(如 Apache、Zeus、IIS 等)

php 5.2.x及以上

MySQL5.1.x及以上

Zend Optimizer 3.x及以上(可以不用)

如果您租用虛擬主機,請咨詢虛擬主機提供商,您的空間伺服器是否已安裝了上述軟體。

由於
PHPWind的數據表具有前綴設計,因此通常情況下可以將PHPWind與其他軟體安裝在同一個資料庫中,或採用不同的前綴名在同一個資料庫中安裝多個PHPWind
論壇而不產生沖突。

您的 MySQL 資料庫賬號應當擁有 CREATE、DROP、ALTER 等執行許可權。

安裝可能用到的工具軟體

PHPWind論壇系統的安裝使用非常簡單,因此您可能需要用到的工具軟體也非常少。

1)您可能需要一個FTP客戶端軟體來上傳PHPWind程序文件;

2)PHPWind是一個開源系統,您可以按自己的想法來修改程序代碼,從而得到自己想要的社區呈現效果,或者社區系統某些配置文件的參數需要修改,此時您可能需要一個簡單的文本文件編輯軟體,一般操作系統自帶的如Windows的記事本或第三方軟體如EditPlus,都可以。

Spacebuilder - 特色

1.產品架構:採用「平台+應用」的設計思想,可以方便及快捷的擴展新的應用;

2. Ajax:表現層採用大量的jQuery技術,使用戶獲得良好的用戶體驗;

3. asp.net mvc:採用微軟最新的asp.net
mvc(c#)進行表現層開發。徹底消除了ViewState可以萬全控制html代碼的輸出;Controller與View完全分離充分避免了皮膚機制的性能損失;原生態的url
routing更利於urlrewrite。

4. 數據存儲:目前採用SQL Server2000/SQLServer2005/SQL
Server2008進行數據存儲,由於數據訪問層採用了Provide設計模式所以可以方便的移植到其他關系型資料庫;

5. 數據訪問:為了提升性能以及資料庫安全性,數據訪問全部採用存儲過程;

6. 高效緩存:使用可分區的緩存技術,並且具有優秀的緩存過期策略,使站點獲得性能提升的同時,保證緩存與資料庫數據同步;

7. 全文檢索:以Lucene為核心實現全文檢索功能,實現索引庫自動更新,並提供企業級的全文檢索性能;

8. 擴展機制:優秀的皮膚實現機制,使客戶可以方便的對現有皮膚進行修改或開發新的皮膚;核心模塊提供了全局事件,客戶可以開發自己的Mole;

9. 配置文件:配置信息均採用XML格式,易於管理設置;

10. 所有頁面均採用xhtml+css進行設計,符合web標准,兼容所有主流瀏覽器(IE、Firefox),降低頁面流量,提高載入速度;

9. PHP有沒有生成國內各省份IP地址的類庫

有.你下載個cms都有這功能,比如phpcms

10. PHP限制某城市訪問

代碼如下,絕對符合你的要求
<?php
//程序不難,難在ip數據獲取和解析。這個$ipInforProviderUrl是有道未公開的ip查詢api,
//返回信息中只有ip地址和地理位置。這個Provider隨時可能失效,請樓主自行尋找
//在適當的腳本中加入以下代碼即可實現樓主的設想
//例如config.php,common.php等被幾乎所有腳本include過的公共腳本
$ipInforProviderUrl="http://www.you.com/smartresult-xml/search.s?&type=ip&q=";
$ip=$_SERVER["REMOTE_ADDR"];
$ipInfor=file_get_contents($ipInforProviderUrl.$ip);
echo $ipInfor;
if(strpos($ipInfor,"深圳"))
echo '禁止訪問';
?>

閱讀全文

與php純真ip庫相關的資料

熱點內容
oraclelinux安裝目錄 瀏覽:133
安卓系統可以安裝編譯器嗎 瀏覽:570
javajson實體類 瀏覽:690
板加密鋼筋是否取代原鋼筋 瀏覽:66
學習編程的思路 瀏覽:230
app易語言post怎麼學 瀏覽:965
地梁的箍筋加密區位置 瀏覽:302
二分法排序程序及編譯結果 瀏覽:679
日語命令形和禁止型 瀏覽:285
安裝軟體用管理員解壓 瀏覽:505
編譯原理代碼塊 瀏覽:400
小孩可以用壓縮面膜嗎 瀏覽:14
錐形倒角怎麼計演算法 瀏覽:882
java合並鏈表 瀏覽:508
pic單片機編譯器 瀏覽:806
麗水四軸加工中心編程 瀏覽:691
國產系統怎麼解壓 瀏覽:554
戰雙程序員 瀏覽:484
him觸摸編程軟體 瀏覽:932
植物大戰僵屍存檔怎麼轉移安卓 瀏覽:852