ホームページ 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 日付ファイルが存在しないか、アクセスが拒否されました";<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 < 0) $ipbegin += pow(2) , 32);<br/> $ipend = implode("", unpack("L", $DataEnd));<br/> if($ipend < 0) $ipend += pow(2, 32);<br/> $ipAllNum = ($ipend - $ipbegin) / 7 + 1;<br/> $BeginNum = 0;<br/> $EndNum = $ipAllNum;<br/> while($ip1num>$ipNum $ip2num<$ipNum) { <br/> $Middle= intval(($EndNum + $BeginNum) / 2);<br/> fseek($fd, $ipbegin + 7 * $Middle);<br/> $ipData1 = fread($fd, 4); <br/> if(strlen($ipData1) < 4) {<br/> fclose($fd);<br/> return "システムエラー";<br/> }<br/> $ip1num = implode("", unpack( "L", $ipData1));<br/> if($ip1num < 0) $ip1num += pow(2, 32);<br/> if($ip1num > $ipNum) {<br> $EndNum = $Middle;<br> continue;<br> }<br> $データシーク = fread($fd, 3);<br> if(strlen($DataSeek) < 3) {<br> fclose($fd);<br> return "システムエラー";<br> $DataSeek = implode("", unpack("L", $DataSeek.chr(0)));<br> fseek($fd, $DataSeek);<br> $ipData2 = fread($fd, 4);<br> if(strlen($ipData2) < 4) {<br> fclose($fd);<br> return "システムエラー";<br> }<br> $ip2num = implode("", unpack("L ", $ipData2));<br> if($ip2num < 0) $ip2num += pow(2, 32);<br> if($ip2num < $ipNum) {<br> 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 "システムエラー";<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) < 3) {<br> fclose($fd);<br> return "システムエラー";<br> }<br> $ipFlag = fread($fd, 1);<br> if($ipFlag == ( 2)) {<br> $AddrSeek2 = fread($fd, 3);<br> if(strlen($AddrSeek2) fclose($fd);<br> 「システムエラー」を返します;<br> }<br> $AddrSeek2 = implode("", unpack("L", $AddrSeek2.chr(0)));<br> fseek($fd, $AddrSeek2);<br> { <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) < 3) {<br> fclose($fd);<br> return "システムエラー";<br> }<br> $ addrseek2 = inprode( ""、unpack( "l"、$ addrseek2.chr(0)));<br>fseek($ fd、$ addrseek2); <br>} elsek($ fd($ 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 = "不明";<br> }<br> $ipaddr = iconv("gbk", "utf-8//IGNORE", $ipaddr); <br> if( $ipaddr != " " )<br> return $ipaddr;<br> else<br> $ipaddr = "地址未知!火星来客?";<br> return $ipaddr;<br>}<br>



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

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;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、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 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか May 12, 2023 pm 06:34 PM

Vue3.2 セットアップ構文シュガーは、単一ファイル コンポーネント (SFC) で結合された API を使用して、Vue3.0 の面倒なセットアップを解決するコンパイル時構文シュガーです。宣言された変数、関数、インポートによって導入されたコンテンツは、インポートによって公開されます。使用上の問題点 1. 宣言した変数、関数、import で導入した内容を使用中に return する必要はなく、糖衣構文を使用することができます。 // 導入した内容をインポート import{getToday }from'./utils'//variable constmsg='Hello !'//function func

JavaScript関数の戻り値とreturn文の詳しい解説 JavaScript関数の戻り値とreturn文の詳しい解説 Aug 04, 2022 am 09:46 AM

JavaScript 関数は、外部と対話するための 2 つのインターフェースを提供し、パラメータは外部情報を受け取る入り口として機能し、戻り値は演算結果を外部にフィードバックする出口として機能します。次の記事では、JavaScript 関数の戻り値を理解し、return ステートメントの使用法を簡単に分析します。

Pythonで戻り値を使う方法 Pythonで戻り値を使う方法 Oct 07, 2023 am 11:10 AM

Python の戻り値 return の使い方は、関数が return ステートメントを実行すると、実行が直ちに停止され、関数が呼び出された場所に指定された値が返されます。詳細な使用法: 1. 単一の値を返す; 2. 複数の値を返す; 3. null 値を返す; 4. 関数の実行を早期に終了する。

JavaScript で return キーワードを使用する JavaScript で return キーワードを使用する Feb 18, 2024 pm 12:45 PM

JavaScript での return の使用には特定のコード例が必要です。 JavaScript では、return ステートメントを使用して関数から返される値を指定します。関数の実行を終了するために使用できるだけでなく、関数が呼び出された場所に値を返すこともできます。 return ステートメントには次の一般的な用途があります。 値を返す return ステートメントは、関数が呼び出された場所に値を返すために使用できます。簡単な例を次に示します。 functionadd(a,b){

See all articles