検索
ホームページバックエンド開発PHPチュートリアルPHP を使用して IP を特定し、対応する市の支店にリダイレクトする方法_PHP チュートリアル

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 プログラミング設計に役立つことを願っています。

www.bkjia.com本当http://www.bkjia.com/PHPjc/973923.html技術記事この記事では主に、PHP で IP を決定し、対応する都市のサブステーションにジャンプする方法を紹介します。PHP による URL の解析とジャンプのテクニックを例を用いて分析します。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPで__CLONEメソッドを使用する方法は?PHPで__CLONEメソッドを使用する方法は?May 15, 2025 pm 08:48 PM

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

PHPでGOTOステートメントを使用する方法は?PHPでGOTOステートメントを使用する方法は?May 15, 2025 pm 08:45 PM

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

PHPにデータ統計を実装する方法は?PHPにデータ統計を実装する方法は?May 15, 2025 pm 08:42 PM

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

PHPで匿名関数を使用する方法は?PHPで匿名関数を使用する方法は?May 15, 2025 pm 08:39 PM

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

PHPでarray_randでキーをランダムに取得するにはどうすればよいですか?PHPでarray_randでキーをランダムに取得するにはどうすればよいですか?May 15, 2025 pm 08:36 PM

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

PHPで機能のホットアップデートを実装する方法は?PHPで機能のホットアップデートを実装する方法は?May 15, 2025 pm 08:33 PM

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

PHPアレイを反復しながら要素を交換する方法は?PHPアレイを反復しながら要素を交換する方法は?May 15, 2025 pm 08:30 PM

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

PHPでISBN文字列を検証する方法は?PHPでISBN文字列を検証する方法は?May 15, 2025 pm 08:27 PM

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

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

DVWA

DVWA

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

mPDF

mPDF

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MantisBT

MantisBT

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境