PHPを使用してIPを決定し、対応する都市サブステーションにリダイレクトする方法
この記事では、主にPHPでIPを決定し、対応する都市サブステーションにリダイレクトする方法を紹介し、PHPのテクニックを分析します。 URLを解析して例にジャンプすると、特定の参考値があり、必要な友達が参照できます
この記事の例では、PHP がどのように IP を決定し、対応する都市の変電所にリダイレクトするかを説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
クラスQQWry{ var $StartIP=0; var $EndIP=0; var $ Country=''; var $Local=''; var $ CountryFlag=0; // 国の場所をマークします // 0x01、その後に国オフセットの 3 バイトが続き、ローカルなし // 0x02、その後に国オフセットの 3 バイト、その後にローカル // その他、国、ローカル、ローカルでも同様の圧縮があります。複数の参照の可能性があります。 var $fp; var $FirstStartIp=0; var $LastStartIp=0; var $EndIpOff=0 ; 関数getStartIp($RecNo){ $offset=$this->FirstStartIp+$RecNo * 7 ; @fseek($this->fp,$offset,SEEK_SET) ; $buf=fread($this->fp ,7) ; $this->EndIpOff=ord($buf[4])+(ord($buf[5])*256)+(ord($buf[6])*256*256); $this->StartIp=ord($buf[0])+(ord($buf[1])*256)+(ord($buf[2])*256*256)+(ord($buf) [3])*256*256*256); $this->StartIp を返す; } 関数getEndIp(){ @fseek ( $this->fp 、 $this->EndIpOff 、 SEEK_SET ) ; $buf=fread ( $this->fp , 5 ) ; $this->EndIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf) [3])*256*256*256); $this-> CountryFlag=ord ( $buf[4] ) ; $this->EndIp を返す ; } 関数 get Country(){ スイッチ ( $this->国旗 ) { ケース1: ケース2: $this-> Country=$this->getFlagStr ( $this->EndIpOff+4) ; //echo sprintf('EndIpOffset=(%x)',$this->EndIpOff ); $this->ローカル=( 1 == $this->国フラグ)? '' : $this->getFlagStr ( $this->EndIpOff+8); 休憩; デフォルト: $this-> Country=$this->getFlagStr ($this->EndIpOff+4); $this->Local=$this->getFlagStr ( ftell ( $this->fp )); } } 関数 getFlagStr ($offset){ $フラグ=0 ; その間(1){ @fseek($this->fp ,$offset,SEEK_SET) ; $flag=ord(fgetc($this->fp ) ) ; if ( $flag == 1 || $flag == 2 ) { $buf=fread ($this->fp , 3 ) ; if ($flag==2){ $this->国旗=2; $this->EndIpOff=$offset - 4 ; } $offset=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256); } その他{ 休憩; } } if($offset 戻る ''; @fseek($this->fp , $offset , SEEK_SET ) ;
return $this->getStr(); } 関数getStr() { $str='' ; ながら ( 1 ) { $c=fgetc ( $this->fp ) ; //エコー "$cn" ; if(ord($c[0])== 0 ) 休憩; $str.= $c ; } //エコー "$str n"; $str を返します ; } 関数 qqwry ($dotip='') { if( !is_string($dotip) || $dotip==''){return;} if(preg_match("/^127/",$dotip)){$this-> Country="本地网络";return ;} elseif(preg_match("/^192/",$dotip)) {$this-> Country="局域网";return ;} $nRet; $ip=$this->IpToInt ( $dotip ); $this->fp= fopen(__QQWRY__, "rb"); if ($this->fp == NULL) { $szLocal= "OpenFileError"; 1を返す; } @fseek ( $this->fp , 0 , SEEK_SET ); $buf=fread ( $this->fp , 8 ); $this->FirstStartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf) [3])*256*256*256); $this->LastStartIp=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf) [7])*256*256*256); $RecordCount= フロア(($this->LastStartIp - $this->FirstStartIp) / 7); if ($RecordCount $this->国="ファイルデータエラー"; fclose($this->fp) ; 2 を返す ; } $RangB= 0; $RangE= $RecordCount; // 一致... その間 ($RangB { $RecNo= フロア(($RangB + $RangE) / 2); $this->getStartIp ( $RecNo ) ; if ( $ip == $this->StartIp ) { $RangB=$RecNo ; 休憩; } if ($ip>$this->StartIp) $RangB= $RecNo; その他 $RangE= $RecNo; } $this->getStartIp ( $RangB ) ; $this->getEndIp ( ) ; if ( ( $this->StartIp EndIp >= $ip ) ){ $nRet=0 ; $this->get Country ( ) ; //这样不太好…………所以………… $this->Local=str_replace("エリアエラー", "",$this->Local); } その他{ $nRet=3 ; $this->国='不明' ; $this->ローカル='' ; } fclose ( $this->fp ); $this-> Country=preg_replace("/(CZ88.NET)|(無害なネットワーク)/","LAN/不明",$this-> Country); $this->Local=preg_replace("/(CZ88.NET)|(無害なネットワーク)/","LAN/不明",$this->Local); //////////////上記の $nRet の値 0 と 3 を見て、次の行をコメントアウトします $nRet を返す ; //return "$this->country $this->Local";# 場所と国を直接返すだけです } 関数 IpToInt($Ip) { $array=explode('.',$Ip); $Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3]; $Int を返す; } } ?> |
デモの例は次のとおりです:
?
1 2 3 4 |
$QQWry=新しい QQWry; $QQWry->QQWry("60.31.95.255"); $country = $QQWry->国; エコー $QQWry->国。",".$QQWry->ローカル; |
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

PHPの__Cloneメソッドは、オブジェクトクローン時にカスタム操作を実行するために使用されます。クローンキーワードを使用してオブジェクトをクローニングする場合、オブジェクトに__クローンメソッドがある場合、メソッドが自動的に呼び出され、クローン型属性をリセットしてクローンオブジェクトの独立性を確保するなど、クローンプロセス中にカスタマイズされた処理を許可します。

PHPでは、GOTOステートメントは、プログラムの特定のタグに無条件にジャンプするために使用されます。 1)複雑なネストされたループまたは条件付きステートメントの処理を簡素化することができますが、2)GOTOを使用すると、コードの理解と維持が困難になる場合があります。3)構造化された制御ステートメントの使用を優先することをお勧めします。全体として、gotoは注意して使用する必要があり、コードの読みやすさと保守性を確保するために、ベストプラクティスに従う必要があります。

PHPでは、組み込み関数、カスタム関数、およびサードパーティライブラリを使用してデータ統計を実現できます。 1)array_sum()やcount()などの組み込み関数を使用して、基本統計を実行します。 2)カスタム関数を記述して、中央値などの複雑な統計を計算します。 3)PHP-MLライブラリを使用して、高度な統計分析を実行します。これらの方法により、データ統計を効率的に実行できます。

はい、PHPの匿名関数は、名前のない関数を参照します。これらは、他の関数へのパラメーターとして、および関数の返品値として渡すことができ、コードをより柔軟で効率的にします。匿名関数を使用する場合、範囲とパフォーマンスの問題に注意を払う必要があります。

PHPでは、array_rand関数を使用して、配列からランダムにキーを取得できます。 1)array_rand($ array)を使用して、単一のランダムキーを取得します。 2)array_rand($ array、n)を使用して、nランダムキーを取得します。この機能は効率的で柔軟ですが、大規模なデータの主要なカウントとパフォーマンスの問題の制限に注意を払う必要があります。

PHPに機能のホットアップデートを実装するには、次の3つの方法があります。 2。opcacheを使用して、opcacheを再起動してホットアップデートを実現します。 3.展開やAnsibleなどの外部ツールを使用して、コードを自動的に展開および更新します。

PHPでは、次の方法を使用して配列要素を横断および交換できます。1。foreachループと参照(&$値)を使用して要素を変更しますが、参照が副作用を引き起こす可能性があることに注意してください。 2。forループを使用して、インデックスと値に直接アクセスして、参照の問題を回避します。 3. array_map関数を使用して簡潔な変更を加えますが、キー名はリセットされます。 4. array_walk関数を使用して値を変更し、キー名を保持します。方法を選択する際には、パフォーマンス、副作用、キー名保持要件を考慮する必要があります。

PHPのISBN文字列の検証は、ISBN-10とISBN-13の2つの形式を処理できる関数を介して実装できます。 1.すべての非数字を削除します。 2。ISBN-10の場合、加重和の計算が使用され、結果を11。3で割ることができる場合は有効です。ISBN-13の場合、異なる重み付け和の計算を使用し、結果を10で割ることができる場合は有効です。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
