Red de conocimientos sobre prescripción popular - Remedios caseros - Los visitantes con código PHP cuya IP provenga de China saltarán a la página china y los visitantes no chinos saltarán a la página en inglés.

Los visitantes con código PHP cuya IP provenga de China saltarán a la página china y los visitantes no chinos saltarán a la página en inglés.

Quizás el servidor original tenga una interfaz para leer direcciones IP. Quizás tengas mal juicio.

Ponlo en index.php.

¿Es? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

incluye _ once 'clase _I PHP'

$ IP = '222.132.78'; /p> p>

$ iplo = nueva ubicación I();

$a_provinces=Array(

0 ' = gt'Hebei',

1 ' =>'Hainan',

2' =>'Guizhou',

3' =>'Guangxi',

4' => ' Guangdong',

5' =>'Gansu',

6' =>Fujian',

7' =>Pekín',

8' =>'Anhui',

9' =>'Henan',

10' =>Heilongjiang',

11' =>'Hubei',

12' =>Hunan',

13' =>Jilin',

14' => 'Jiangsu',

15' => 'Jiangxi',

16' => 'Liaoning',

17' => Mongolia Interior',

18' =>Ningxia',

19' =>Qinghai',

20' =>Shandong',

21' => Shanxi',

22' =>Shaanxi',

23' =>Shanghái',

24' = >'Sichuan',

25' =>'Tianjin',

26' =>Tíbet',

27' =>Xinjiang',

28' => Yunnan',

29 ' => Zhejiang',

30 ' => 'Chongqing',

p>

31' =>Hong Kong',

32' =>Macao',

33' =>Provincia de Taiwán

) ;

$ China = "";

$ strs = $ iplogt; obtener ubicación($ IP);

//print _ r($ strs);

//echo $ strs[' país ' ];

foreach($a _ provincias$ci)

{

$pos = strpos($strs['país'], $ci) ;

si ($pos! ==falso){

echo $ ci

$ china = $ ci

romper;

}

}

echo $China;

if ($中国!='')

$ home = ' Chino/index PHP ';

Otro

$ home = 'English/index.php';

echo "ltscriptlanguage='javascript' gtwindow.location.href='". $casa.

"; lt/script gt;";

gt

Descripción: 1.qqwry.dat se puede encontrar en la carpeta qq. Estos tres archivos deben colocarse en el mismo directorio.

2. Archivo de clase: class_iplocation.php

lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

/**

* Clase de consulta de ubicación geográfica de IP

*

* @author马

* @Version 1.5

* @Copyright 2005 CoolCode.CN

*/

Categoría I Posición {

/**

* QQWry. Puntero de archivo dat

*

* @var recurso

*/

var $ fp

/* *

*La dirección de desplazamiento del primer registro IP

*

* @var int

*/

var $ firstip

/**

*La dirección de desplazamiento del último registro IP

*

* @var int

*/

var $ lastip

/**

* Número total de registros de IP (excluidos los registros de información de versión)< / p>

*

* @var int

*/

var $ totalip

/**

*Devuelve el entero largo leído.

*

* @Access privado

* @return int

*/

Función getlong() {

//Convierte la codificación little-endian de 4 bytes leída en un entero largo.

$resultado = unpack('Vlong ', fread($this- gt; fp, 4));

Return $resultado[' long ']; p>}

/**

* Devuelve la lectura del entero de 3 bytes de longitud.

*

* @Acceso privado

* @return int

*/

Función getlong3() {

//Convierte la codificación little-endian de 3 bytes leída en un entero largo.

$resultado = unpack('Vlong ', fread($this- gt; fp, 3).chr(0));

Return $resultado[' long '];

}

/**

* Devuelve la dirección IP que se puede comparar después de la compresión.

*

* @Acceso privado

* @param string $ip

* @Return string

*/

Paquete de funciones (ip) {

//Convierte la dirección IP a un entero largo Si la dirección IP es incorrecta en PHP5, se devuelve False.

//En este momento, intval convierte Flese en un número entero -1 y luego lo comprime en una cadena codificada en big-endian.

paquete de devolución('N ', intval(IP 2 long($ IP)))

}

/**

*Devuelve la cadena leída.

*

* @Acceso privado

* @param string $data

* @Return string

*/

Función getstring($data = "") {

$ char = fread($ this- gt; fp, 1

mientras (); order($ char)>0) {//La cadena se guarda en formato C y termina en \0.

$datos. = $char//Concatenar los caracteres leídos después de la cadena dada.

$ char = fread($ this- gt; fp, 1

}

Devuelve $datos

}

p>

/**

*Información de la región de retorno

*

* @Acceso privado

* @Return string

*/

Función getarea() {

$ byte = fread($ this- gt; fp, 1); byte

switch(order($ byte)){

Caso 0: //Sin información de región.

$ area =

Break;

Caso 1:

Caso 2: //El byte de bandera es 1 o 2, lo que indica La información de la zona se redirige.

fseek($this-gt;fp,$this-gt;getlong 3());

$area = $this-gt;getstring();

Pausa;

Predeterminado: //De lo contrario, significa que la información del área no ha sido redirigida.

$ área = $ this- gt; getstring($ byte);

Romper

}

return $ área

p>

p>

}

/**

*Devuelve información de región según la dirección IP o el nombre de dominio proporcionado.

*

* @Access public

* @param string $ip

* @Return array

*/

Función getlocation($ip) {

Si (!$ this- gt; fp) devuelve nulo // Si el archivo de datos no se abre correctamente, devuelve nulo directamente.

$ ubicación[' IP ']= gethostbyname($ IP); //Convierte el nombre de dominio ingresado en una dirección IP.

$IP = $this->pack IP($location['IP']); //Convierte la dirección IP de entrada en una dirección IP comparable.

//Las direcciones IP ilegales se convertirán a 255.255.255.255.

//Método de búsqueda binaria

$ l = 0; //Límite inferior de búsqueda

$ u = $ this- gt//Límite superior de búsqueda

$findip = $this-gt;lastip//Si no se encuentra, devuelve el último registro IP (información de versión QQWry. Dat).

while($l lt; = $u) {//Cuando el límite superior es más pequeño que el límite inferior, la búsqueda falla.

$ I = floor(($ l $ u)/2); //Calcular registros intermedios aproximados

fseek($ this- gt; fp, $ this- gt; first IP $I * 7);

$beginip = strrev(fread($this-gt;fp, 4)); //Obtiene la dirección IP inicial del registro intermedio.

//La función de strrev aquí es convertir la dirección IP comprimida little-endian al formato big-endian.

//A modo de comparación, lo mismo ocurre más adelante.

if($ IP lt; $beginip) {//Cuando la ip del usuario es menor que la dirección IP inicial del registro intermedio,

$ u = $ I-1; // Modifica el límite superior de la búsqueda al registro del medio menos uno.

}

De lo contrario {

fseek($ this- gt; fp, $ this- gt; getlong 3()

$endip = strrev(fread($this- gt; fp, 4)); //Obtiene la dirección IP final del registro intermedio.

if($ IP gt; $endip) {//Cuando la ip del usuario es mayor que la dirección IP final del registro intermedio,

$ l = $ I 1; /Buscará El límite inferior de se modifica al registro medio más uno.

}

Else {//Cuando la IP del usuario está dentro del rango de IP registrado en el medio.

$findip = $this-gt; first IP $I * 7;

Break // Indica que se encuentra el resultado y se sale del bucle.

}

}

}

//Obtener la información de ubicación geográfica de IP encontrada.

fseek($this-gt;fp,$findip);

$ubicación['begin IP']= long 2 IP($this-gt;getlong()); //La dirección inicial del rango de IP del usuario.

$ offset = $ this- gt; get long 3();

fseek($ this- gt; fp, $ offset

$ ubicación); [' endip ']= long 2 IP($ this- gt; getlong()); //La dirección final del rango donde se encuentra la IP del usuario.

$ byte = fread($ this- gt; fp, 1); // Marcar byte

switch(order($ byte)){

Caso 1: //El byte de bandera es 1, lo que indica que la información del país y la región se redirige al mismo tiempo.

$ compensación del país = $this- gt; get long 3(); //Dirección de redireccionamiento

fseek($ this- gt; fp, $ compensación del país);

p>

$ byte = fread($ this- gt; fp, 1); //Marcar byte

switch(order($ byte)){

Caso 2 ://El byte de bandera es 2, lo que indica que la información del país se redirige nuevamente.

fseek($this-gt;fp,$this-gt;getlong 3());

$ubicación['país']=$this-gt;getstring() ;

fseek($ this- gt; fp, $ country offset 4);

$ ubicación[' area ']= $ this- gt; >

Pausa;

Predeterminado: //En caso contrario, significa que la información del país no ha sido redirigida.

$ ubicación[' país ']= $ esto- gt; $ byte

$ ubicación[' área ']= $ esto- gt;

Break;

}

Break;

Caso 2: //El byte de bandera es 2, lo que indica que la información del país es redirigido.

fseek($this-gt;fp,$this-gt;getlong 3());

$ubicación['país']=$this-gt;getstring() ;

fseek($this-gt;fp,$offset 8);

$ubicación['area']=$this-gt;getarea();

Pausa;

Predeterminado: //En caso contrario, significa que la información del país no ha sido redirigida.

$ ubicación[' país ']= $ esto- gt; $ byte

$ ubicación[' área ']= $ esto- gt;

Descanso;

}

if($ ubicación['país']= = " CZ88 . net "){//CZ88. NET significa que no hay información válida.

$ubicación['país'] = "Desconocido";

}

if ($ubicación['area'] == " CZ88.NET" ) {

$ ubicación[' área ']= " ";

}

Devolver $ ubicación

}

/**

*Constructor, abre QQWry. Archivo Dat e inicializa la información en la clase.

*

* @ nombre del archivo de cadena de parámetro

* @ return IpLocation

*/

Función I ubicación($ nombre de archivo = " QQWry.

Dat") {

$ this- gt; FP = 0;

if (($ this- gt; fp = @fopen($filename, ' rb ')! == false){

$this-gt;primera IP = $this-gt;getlong();

$this-gt;lastip = $this-gt;getlong();

$this-gt;totalip =($this-gt;lastip-$this-gt;first IP)/7;

//Registro a ejecutar al final de ejecución del programa

Función de cierre de registro(array(amp$this, '_I ubicación'));

}

}

/ **

*Destructor, utilizado para cerrar automáticamente el archivo abierto después de ejecutar la página

*

*/

función. _ I ubicación(){

if ($ this- gt; fp) {

fclose($ this- gt; FP);

}

$ esto- gt; FP = 0

}

}

gt