cari
Rumahpembangunan bahagian belakangtutorial phpPHP判断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

class QQWry{

var $StartIP=0;

var $EndIP=0;

var $Country='';

var $Local='';

var $CountryFlag=0;

// 标识 Country位置

// 0x01,随后3字节为Country偏移,没有Local

// 0x02,随后3字节为Country偏移,接着是Local

// 其他,Country,Local,Local有类似的压缩。可能多重引用。

var $fp;

var $FirstStartIp=0;

var $LastStartIp=0;

var $EndIpOff=0 ;

function 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);

return $this->StartIp;

}

function 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] ) ;

return $this->EndIp ;

}

function getCountry(){

switch ( $this->CountryFlag ) {

case 1:

case 2:

$this->Country=$this->getFlagStr ( $this->EndIpOff+4) ;

//echo sprintf('EndIpOffset=(%x)',$this->EndIpOff );

$this->Local=( 1 == $this->CountryFlag )? '' : $this->getFlagStr ( $this->EndIpOff+8);

break ;

default :

$this->Country=$this->getFlagStr ($this->EndIpOff+4);

$this->Local=$this->getFlagStr ( ftell ( $this->fp ));

}

}

function getFlagStr ($offset){

$flag=0 ;

while(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->CountryFlag=2;

$this->EndIpOff=$offset - 4 ;

}

$offset=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);

}

else{

break ;

}

}

if($offset

return '';

@fseek($this->fp , $offset , SEEK_SET ) ;

 

return $this->getStr();

}

function getStr ( )

{

$str='' ;

while ( 1 ) {

$c=fgetc ( $this->fp ) ;

//echo "$cn" ;

if(ord($c[0])== 0 )

break ;

$str.= $c ;

}

//echo "$str n";

return $str ;

}

function 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";

return 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= floor(($this->LastStartIp - $this->FirstStartIp) / 7);

if ($RecordCount

$this->Country="FileDataError";

fclose($this->fp) ;

return 2 ;

}

$RangB= 0;

$RangE= $RecordCount;

// Match ...

while ($RangB

{

$RecNo= floor(($RangB + $RangE) / 2);

$this->getStartIp ( $RecNo ) ;

if ( $ip == $this->StartIp )

{

$RangB=$RecNo ;

break ;

}

if ($ip>$this->StartIp)

$RangB= $RecNo;

else

$RangE= $RecNo;

}

$this->getStartIp ( $RangB ) ;

$this->getEndIp ( ) ;

if ( ( $this->StartIp EndIp >= $ip ) ){

$nRet=0 ;

$this->getCountry ( ) ;

//这样不太好..............所以..........

$this->Local=str_replace("area error", "",$this->Local);

}

else{

$nRet=3 ;

$this->Country='未知' ;

$this->Local='' ;

}

fclose ( $this->fp );

$this->Country=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$this->Country);

$this->Local=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$this->Local);

//////////////看看 $nRet在上面的值是什么0和3,于是将下面的行注释掉

return $nRet ;

//return "$this->Country $this->Local";#如此直接返回位置和国家便可以了

}

function IpToInt($Ip) {

$array=explode('.',$Ip);

$Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];

return $Int;

}

}

?>

实例演示如下:

?

1

2

3

4

$QQWry=new QQWry;

$QQWry->QQWry("60.31.95.255");

$country = $QQWry->Country;

echo $QQWry->Country.",".$QQWry->Local;

希望本文所述对大家的php程序设计有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/973923.htmlTechArticlePHP判断IP并转跳到相应城市分站的方法 这篇文章主要介绍了PHP判断IP并转跳到相应城市分站的方法,实例分析了php解析URL及跳转的技巧,具有一...
Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Suntikan Ketergantungan di PHP: Menghindari Perangkap BiasaSuntikan Ketergantungan di PHP: Menghindari Perangkap BiasaMay 16, 2025 am 12:17 AM

DependencyInjection (DI) inphpenhancescodeflexabilityandtestabilitybydecouplingDependencyCreationFromusage.toImplementDieffectively: 1) UseIcontainersjudiciousytoavoavoidover-engineering.2) mengelakkan constructoLoadbylimitingdendenchreeorfour.3)

Cara mempercepat laman web PHP anda: Penalaan PrestasiCara mempercepat laman web PHP anda: Penalaan PrestasiMay 16, 2025 am 12:12 AM

Toimproveyourphpwebsite'sperformance, usetheseStrategies: 1) pelaksanaanPodeCachingWithopcachetospeedupscriptinterpretation.2) OptimisedataBasequeriesqueriesSelectingOnlyNessaryFields.3)

Menghantar e -mel massa dengan PHP: Adakah mungkin?Menghantar e -mel massa dengan PHP: Adakah mungkin?May 16, 2025 am 12:10 AM

Ya, itispossibletosendmassemailswithphp.1) uselibrarieshpmailerorswiftmailoreforefficientemailsending.2)

Apakah tujuan suntikan ketergantungan dalam PHP?Apakah tujuan suntikan ketergantungan dalam PHP?May 16, 2025 am 12:10 AM

DependencyInjection (DI) inphpisadesignpatternTheevesinversionofControl (IOC) ByallowingdependencyestobeNectedIntoClasses, Enhancingmodularity, Testability, danFlexibility.DideDecouplassClassSesesesesSesesSesesSesesSesesSesesSesesspeciflementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglemors, Maklumat

Bagaimana cara menghantar e -mel menggunakan php?Bagaimana cara menghantar e -mel menggunakan php?May 16, 2025 am 12:03 AM

Cara terbaik untuk menghantar e -mel menggunakan PHP termasuk: 1. Gunakan fungsi mel () php untuk penghantaran asas; 2. Gunakan perpustakaan phpmailer untuk menghantar mel lebih kompleks HTML; 3. Gunakan perkhidmatan mel transaksional seperti SendGrid untuk meningkatkan keupayaan kebolehpercayaan dan analisis. Dengan kaedah ini, anda boleh memastikan bahawa e -mel bukan sahaja mencapai peti masuk, tetapi juga menarik penerima.

Bagaimana cara mengira jumlah elemen dalam pelbagai PHP multidimensional?Bagaimana cara mengira jumlah elemen dalam pelbagai PHP multidimensional?May 15, 2025 pm 09:00 PM

Mengira jumlah elemen dalam array multidimensi PHP boleh dilakukan dengan menggunakan kaedah rekursif atau berulang. 1. Kaedah rekursif dikira dengan melintasi array dan rekursif memproses susunan bersarang. 2. Kaedah berulang menggunakan timbunan untuk mensimulasikan rekursi untuk mengelakkan masalah kedalaman. 3. Fungsi Array_Walk_Recursive juga boleh dilaksanakan, tetapi ia memerlukan pengiraan manual.

Apakah ciri-ciri gelung sementara di PHP?Apakah ciri-ciri gelung sementara di PHP?May 15, 2025 pm 08:57 PM

Dalam PHP, ciri-ciri gelung do-sementara adalah untuk memastikan bahawa badan gelung dilaksanakan sekurang-kurangnya sekali, dan kemudian memutuskan sama ada untuk meneruskan gelung berdasarkan syarat-syarat. 1) Ia melaksanakan badan gelung sebelum pemeriksaan bersyarat, sesuai untuk senario di mana operasi perlu dilakukan sekurang -kurangnya sekali, seperti pengesahan input pengguna dan sistem menu. 2) Walau bagaimanapun, sintaks gelung do-sementara boleh menyebabkan kekeliruan di kalangan pemula dan boleh menambah overhead prestasi yang tidak perlu.

Bagaimana Hash Strings dalam PHP?Bagaimana Hash Strings dalam PHP?May 15, 2025 pm 08:54 PM

String hashing yang cekap dalam PHP boleh menggunakan kaedah berikut: 1. Gunakan fungsi MD5 untuk hashing cepat, tetapi tidak sesuai untuk penyimpanan kata laluan. 2. Gunakan fungsi SHA256 untuk meningkatkan keselamatan. 3. Gunakan fungsi password_hash untuk memproses kata laluan untuk menyediakan keselamatan dan kemudahan tertinggi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Ekspedisi 33 - Cara mendapatkan pemangkin Chroma yang sempurna
2 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan