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.
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>
p>
/**
*Información de la región de retorno
*
* @Acceso privado
* @Return string
*/
Función getarea() {
$ byte = fread($ this- gt; fp, 1); byte p>
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);
} p>
$ esto- gt; FP = 0
}
}
gt