Home > Backend Development > PHP Tutorial > How to use PHP to determine the IP and redirect to the corresponding city branch_PHP Tutorial

How to use PHP to determine the IP and redirect to the corresponding city branch_PHP Tutorial

WBOY
Release: 2016-07-13 10:00:19
Original
856 people have browsed it

How PHP determines IP and redirects to the corresponding city sub-station

This article mainly introduces the method of PHP determining IP and redirecting to the corresponding city sub-station, example analysis Learned the skills of php parsing URL and jumping, which has certain reference value. Friends who need it can refer to it

The example in this article describes how PHP determines the IP and redirects to the corresponding city sub-station. Share it with everyone for your reference. The specific implementation method is as follows:

?

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;

//Identifies the Country location

// 0x01, followed by 3 bytes for Country offset, no Local

// 0x02, followed by 3 bytes for Country offset, followed by Local

// Others, Country, Local, and Local have similar compression. Possible multiple references.

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<12)

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 <= 1){

$this->Country="FileDataError";

fclose($this->fp) ;

return 2 ;

}

$RangB= 0;

$RangE= $RecordCount;

// Match ...

while ($RangB < $RangE-1)

{

$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 <= $ip ) && ( $this->EndIp >= $ip ) ){

$nRet=0 ;

$this->getCountry ( ) ;

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

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

}

else{

$nRet=3 ;

$this->Country='Unknown' ;

$this->Local='' ;

}

fclose ( $this->fp );

$this->Country=preg_replace("/(CZ88.NET)|(Innocent Network)/","LAN/Unknown",$this->Country);

$this->Local=preg_replace("/(CZ88.NET)|(Innocent Network)/","LAN/Unknown",$this->Local);

///////////////Look at the values ​​0 and 3 of $nRet above, so comment out the following lines

return $nRet ;

//return "$this->Country $this->Local";#Just return the location and country directly

}

function IpToInt($Ip) {

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

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

return $Int;

}

}

?>

An example demonstration is as follows:

?

1

2

3

4

$QQWry=new QQWry;

$QQWry->QQWry("60.31.95.255");

$country = $QQWry->Country;

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

1 2

3

4

$QQWry=new QQWry;$QQWry->QQWry("60.31.95.255"); $country = $QQWry->Country; echo $QQWry->Country.",".$QQWry->Local;
I hope this article will be helpful to everyone’s PHP programming design.
http://www.bkjia.com/PHPjc/973923.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/973923.htmlTechArticleHow to use PHP to determine IP and redirect to the corresponding city substation. This article mainly introduces how PHP determines IP and redirects to it. The method of jumping to the corresponding city sub-station, the example analysis of PHP URL parsing and jumping skills, has a...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template