首頁 php教程 php手册 PHP转换IP地址到真实地址

PHP转换IP地址到真实地址

Jun 21, 2016 am 08:55 AM
fread return

生在红旗下长在春风里,长期浸泡在河蟹社会里面所以久而久之就有了一些河蟹的思维方式,正好有一段时间在做一个.NET的网站访问统计系统,顺便想着怎么“监视”下每一个留言的博主们的所在地,于是就有了如今下图所示的根据获取到的留言者的IP地址得到留言者所在的地区,当然并没有河蟹社会监视人民群众的意思,纯属了解一下各位博主所在的真实地点,万一是个美女博主不就可以让我有线索可循。

  想要把IPv4地址转为真实的地址,肯定要参考IP数据库,商业的IP数据库存储在关系型数据库中,查询和使用都非常方便,但是成本不是个人和小公司愿意承受的,所以简单应用的思路就是利用一些免费的IP数据库或者一些大网站提供的查询API,他们的数据量足够我们使用了。

  1. 利用纯真IP数据库

  利用本地的QQWry.Dat文件(搜索下载一个QQWry.Dat 文件放到你的wordpress主题根目录下),优点是查询速度非常快,缺点是数据库文件要放在自己的空间内并且要偶尔更新数据库。时间关系废话不多说,下面是使用这个文件的函数,如果是在WordPress里面使用这个功能,把下面的代码写入主题下面的functions.php里面,然后在comments-list的输出即可。仅管理员可见话,则调用代码即可。如果是其他程序引用,输入一个有效的IPv4地址就可以得到一个真实的地址。

以下为引用的内容:<br><br>function convertip($ip) {<br>    $dat_path = TEMPLATEPATH."/QQWry.Dat";<br>    if(!$fd = @fopen($dat_path, "rb")){<br>        return "IP date file not exists or access denied";<br>    }<br>    $ip = explode(".", $ip);<br>    $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];<br>    $DataBegin = fread($fd, 4);<br>    $DataEnd = fread($fd, 4);<br>    $ipbegin = implode("", unpack("L", $DataBegin));<br>    if($ipbegin     $ipend = implode("", unpack("L", $DataEnd));<br>    if($ipend     $ipAllNum = ($ipend - $ipbegin) / 7 + 1;<br>    $BeginNum = 0;<br>    $EndNum = $ipAllNum;<br>    while($ip1num>$ipNum $ip2num        $Middle= intval(($EndNum + $BeginNum) / 2);<br>        fseek($fd, $ipbegin + 7 * $Middle);<br>        $ipData1 = fread($fd, 4);<br>        if(strlen($ipData1)             fclose($fd);<br>            return "System Error";<br>        }<br>        $ip1num = implode("", unpack("L", $ipData1));<br>        if($ip1num         if($ip1num > $ipNum) {<br>            $EndNum = $Middle;<br>            continue;<br>        }<br>        $DataSeek = fread($fd, 3);<br>        if(strlen($DataSeek)             fclose($fd);<br>            return "System Error";<br>        }<br>        $DataSeek = implode("", unpack("L", $DataSeek.chr(0)));<br>        fseek($fd, $DataSeek);<br>        $ipData2 = fread($fd, 4);<br>        if(strlen($ipData2)             fclose($fd);<br>            return "System Error";<br>        }<br>        $ip2num = implode("", unpack("L", $ipData2));<br>        if($ip2num         if($ip2num             if($Middle == $BeginNum) {<br>                fclose($fd);<br>                return "Unknown";<br>            }<br>            $BeginNum = $Middle;<br>        }<br>    }<br>    $ipFlag = fread($fd, 1);<br>    if($ipFlag == chr(1)) {<br>        $ipSeek = fread($fd, 3);<br>        if(strlen($ipSeek)             fclose($fd);<br>            return "System Error";<br>        }<br>        $ipSeek = implode("", unpack("L", $ipSeek.chr(0)));<br>        fseek($fd, $ipSeek);<br>        $ipFlag = fread($fd, 1);<br>    }<br>    if($ipFlag == chr(2)) {<br>        $AddrSeek = fread($fd, 3);<br>        if(strlen($AddrSeek)             fclose($fd);<br>            return "System Error";<br>        }<br>        $ipFlag = fread($fd, 1);<br>        if($ipFlag == chr(2)) {<br>            $AddrSeek2 = fread($fd, 3);<br>            if(strlen($AddrSeek2)                 fclose($fd);<br>                return "System Error";<br>            }<br>            $AddrSeek2 = implode("", unpack("L", $AddrSeek2.chr(0)));<br>            fseek($fd, $AddrSeek2);<br>        } else {<br>            fseek($fd, -1, SEEK_CUR);<br>        }<br>        while(($char = fread($fd, 1)) != chr(0))<br>        $ipAddr2 .= $char;<br>        $AddrSeek = implode("", unpack("L", $AddrSeek.chr(0)));<br>        fseek($fd, $AddrSeek);<br>        while(($char = fread($fd, 1)) != chr(0))<br>        $ipAddr1 .= $char;<br>    } else {<br>        fseek($fd, -1, SEEK_CUR);<br>        while(($char = fread($fd, 1)) != chr(0))<br>        $ipAddr1 .= $char;<br><br>        $ipFlag = fread($fd, 1);<br>        if($ipFlag == chr(2)) {<br>            $AddrSeek2 = fread($fd, 3);<br>            if(strlen($AddrSeek2)                 fclose($fd);<br>                return "System Error";<br>            }<br>            $AddrSeek2 = implode("", unpack("L", $AddrSeek2.chr(0)));<br>            fseek($fd, $AddrSeek2);<br>        } else {<br>            fseek($fd, -1, SEEK_CUR);<br>        }<br>        while(($char = fread($fd, 1)) != chr(0)){<br>            $ipAddr2 .= $char;<br>        }<br>    }<br>    fclose($fd);<br>    if(preg_match("/http/i", $ipAddr2)) {<br>        $ipAddr2 = "";<br>    }<br>    $ipaddr = "$ipAddr1 $ipAddr2";<br>    $ipaddr = preg_replace("/CZ88.Net/is", "", $ipaddr);<br>    $ipaddr = preg_replace("/^s*/is", "", $ipaddr);<br>    $ipaddr = preg_replace("/s*$/is", "", $ipaddr);<br>    if(preg_match("/http/i", $ipaddr) $ipaddr == "") {<br>        $ipaddr = "Unknown";<br>    }<br>    $ipaddr = iconv("gbk", "utf-8//IGNORE", $ipaddr); <br>    if( $ipaddr != "  " )<br>        return $ipaddr;<br>    else<br>        $ipaddr = "地址未知!火星来客?";<br>        return $ipaddr;<br>}



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
C語言return的用法詳解 C語言return的用法詳解 Oct 07, 2023 am 10:58 AM

C語言return的用法有:1、對於傳回值類型為void的函數,可以使用return語句來提前結束函數的執行;2、對於傳回值型別不為void的函數,return語句的作用是將函數的執行結果傳回給呼叫者;3、提前結束函數的執行,在函數內部,我們可以使用return語句來提前結束函數的執行,即使函數並沒有回傳值。

php+fread()亂碼怎麼辦 php+fread()亂碼怎麼辦 Jan 18, 2023 am 10:21 AM

php+fread()亂碼是因為輸出頁面的編碼和被讀取檔案的編碼不一致,其解決方案:1、開啟對應的PHP檔案;2、透過fread函數讀取檔案;3、透過「iconv('gbk' , 'utf-8', $data)”方法將讀取的內容轉碼即可。

Java中return和finally語句的執行順序是怎樣的? Java中return和finally語句的執行順序是怎樣的? Apr 25, 2023 pm 07:55 PM

原始碼:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}#輸出上述程式碼的輸出可以簡單地得出結論:return在finally之前執行,我們來看下字節碼層面上發生了什麼事情。下面截取case1方法的部分字節碼,並且對照源碼,將每個指令的含義註釋在

在PHP中的fread()函數 在PHP中的fread()函數 Sep 07, 2023 pm 11:57 PM

fread()函數從開啟的檔案中讀取資料。 fread()函數在文件末尾或達到指定長度時停止。成功時傳回讀取的字串。失敗時返回FALSE。語法fread(file_pointer,length)參數file_pointer−使用fopen()所建立的檔案系統指標資源。必需。 length−要讀取的最大位元組數。必需。傳回值如果成功,fread()函數傳回讀取的字串。如果失敗,返回FALSE。假設我們有一個名為"one.txt"的文件,其中

Vue3怎麼使用setup語法糖拒絕寫return Vue3怎麼使用setup語法糖拒絕寫return May 12, 2023 pm 06:34 PM

Vue3.2setup語法糖是在單文件組件(SFC)中使用組合式API的編譯時語法糖解決Vue3.0中setup需要繁瑣將聲明的變量、函數以及import引入的內容通過return向外暴露,才能在使用的問題1.在使用中無需return宣告的變數、函數以及import引入的內容,即可在使用語法糖//import引入的內容import{getToday}from'./utils'//變數constmsg='Hello !'//函數func

使用JavaScript中return關鍵字 使用JavaScript中return關鍵字 Feb 18, 2024 pm 12:45 PM

JavaScript中return的用法,需要具體程式碼範例在JavaScript中,return語句用來指定從函數傳回的值。它不僅可以用於結束函數的執行,還可以將一個值傳回給呼叫函數的地方。 return語句有以下幾個常見的用法:傳回一個值return語句可以用來傳回一個值給呼叫函數的地方。下面是一個簡單的範例:functionadd(a,b){

詳解JavaScript函數傳回值和return語句 詳解JavaScript函數傳回值和return語句 Aug 04, 2022 am 09:46 AM

JavaScript 函數提供兩個介面實現與外界的交互,其中參數作為入口,接收外界資訊;返回值作為出口,並將運算結果回饋給外界。以下這篇文章帶大家了解JavaScript函數回傳值,淺析下return語句的用法,希望對大家有幫助!

JavaScript如何使用return語句 JavaScript如何使用return語句 Feb 26, 2024 am 09:21 AM

JavaScript中return的使用方法,需要具體程式碼範例在JavaScript中,return是一個非常重要的關鍵字,它通常用於函數中傳回值或結束函數的執行。 return語句用來將值傳回給函數的呼叫者,並終止函數的執行。 return語句可以在函數的任何位置使用,並且可以傳回任何JavaScript資料類型,包括數字、字串、布林值、

See all articles