Maison  >  Article  >  développement back-end  >  région de requête ip php

région de requête ip php

WBOY
WBOYoriginal
2023-05-06 15:27:071939parcourir

Avec le développement rapide d'Internet, de plus en plus de sites Web et d'applications doivent implémenter la fonction de région de requête d'adresse IP. La zone de requête d'adresse IP peut fournir aux utilisateurs des services plus précis et fournir une prise en charge de données plus raffinée aux entreprises.

Il est relativement simple d'implémenter la fonction de région de requête d'adresse IP en langage PHP. Cet article présentera les principes et les méthodes d'implémentation de la requête d'adresse IP en PHP et aidera les lecteurs à comprendre comment implémenter la fonction de requête de région d'adresse IP dans leurs propres sites Web et applications.

1. Principe de requête d'adresse IP

Le principe de la région de requête d'adresse IP est de convertir l'adresse IP en valeur décimale correspondante et d'obtenir les informations de région correspondantes en interrogeant la bibliothèque d'adresses IP pré-préparée. La base de données d'adresses IP contient généralement la plage d'adresses IP et les informations régionales correspondantes, telles que le pays, la ville, etc.

2. Convertir l'adresse IP en valeur décimale

L'adresse IP est composée de quatre nombres binaires de 8 bits et la plage de valeurs de chaque tableau est de 0 à 255. Les adresses IP peuvent être converties en valeurs décimales. La méthode de conversion spécifique est la suivante :

Décalez le premier tableau vers la gauche de 24 bits, décalez le deuxième tableau vers la gauche de 16 bits, décalez le troisième tableau vers la gauche de 8 bits, laissez le quatrième tableau inchangé, et effectuer un OU bit à bit sur les quatre tableaux. La valeur décimale correspondant à l'adresse IP peut être obtenue par calcul.

Par exemple, l'adresse IP est 192.168.0.1 et le processus de conversion en valeur décimale est le suivant :

192 << 24 = 3232235520

168 << 16 = 1107296256

0 < ;< 8 = 0

1 = 1

3232235520 | 1107296256 | 0 | 1 = 3232235521

3. Préparez la bibliothèque d'adresses IP

Afin de réaliser la fonction de zone de requête d'adresse IP, vous devez préparer un Bibliothèque d'adresses IP. Cette bibliothèque peut être téléchargée ou achetée sur certains sites Web publics ou fournisseurs de données.

Le format de la base de données d'adresses IP est généralement un fichier texte et chaque ligne stocke un segment d'adresse IP et les informations de région correspondantes. Par exemple, voici un exemple de fichier de bibliothèque d'adresses IP :

125.78.0.0-125.79.255.255 Shanghai, Chine

125.103.0.0-125.103.127.255 Zhejiang, Chine

125.110.0.0-125.110.3 .255 Guangdong, Chine

La bibliothèque d'adresses IP peut utiliser la base de données MySQL pour le stockage et la gestion. Plus précisément, les valeurs décimales des valeurs de début et de fin du segment d'adresse IP sont stockées dans une table et des index sont établis pour améliorer l'efficacité des requêtes.

4. PHP implémente la fonction de région de requête d'adresse IP

Pour implémenter la fonction de région de requête d'adresse IP en langage PHP, les étapes suivantes sont requises :

1. Obtenir l'adresse IP de l'utilisateur

En langage PHP, vous pouvez utiliser $ La variable globale _SERVER['REMOTE_ADDR'] obtient l'adresse IP de l'utilisateur. Cette variable stocke l'adresse IP de l'utilisateur, par exemple :

$user_ip = $_SERVER['REMOTE_ADDR'];

2 Convertissez l'adresse IP en la valeur décimale correspondante

Utilisez la fonction ip2long() de PHP pour convertir l'adresse IP. Convertissez en la valeur décimale correspondante, par exemple :

$ip_long = ip2long($user_ip);

3. Interrogez les informations de région correspondant à l'adresse IP

Chaque ligne de la base de données d'adresses IP stocke un segment d'adresse IP et le informations sur la région correspondante. Par conséquent, il est nécessaire d'organiser les fichiers de la bibliothèque d'adresses IP en fonction de « l'adresse IP de petite à grande » et d'utiliser un algorithme de recherche binaire pour demander si l'adresse IP de l'utilisateur se trouve dans la bibliothèque d'adresses IP. S'il existe, renvoyez les informations de région correspondantes.

Le code d'implémentation spécifique est le suivant :

function query_region_by_ip($ip_long, $ip_file) {
$region = 'Unknown';
$fp = fopen($ip_file, 'rb');
if (!$fp ) {

return $region;

}
fseek($fp, 0, SEEK_SET);
$line_size = 24;
$begin = 0;
$end = filesize($ip_file) / $line_size - 1;
while ($begin < ; = $end) {

$middle = intval(($begin + $end) / 2);
fseek($fp, $middle * $line_size, SEEK_SET);
$line = fread($fp, $line_size);
$start_ip = unpack('N', substr($line, 0, 4))[1];
$end_ip = unpack('N', substr($line, 4, 4))[1];
if ($ip_long < $start_ip) {
  $end = $middle - 1;
}
elseif ($ip_long > $end_ip) {
  $begin = $middle + 1;
}
else {
  $off = unpack('V', substr($line, 8, 2) . "\x0\x0")[1];
  fseek($fp, $off, SEEK_SET);
  $region = rtrim(fread($fp, $line_size - 8));
  break;
}

}
fclose($fp);
return $region;
}

5. Résumé

La région de requête d'adresse IP est l'un des besoins courants des sites Web et des applications. La mise en œuvre de la fonction de région de requête d'adresse IP peut fournir aux utilisateurs des services plus personnalisés et améliorer la satisfaction et la fidélité des utilisateurs.

Cet article présente les principes et les méthodes de PHP pour implémenter la région de requête d'adresse IP, y compris le processus détaillé de conversion des adresses IP en valeurs décimales correspondantes, la préparation des bibliothèques d'adresses IP et l'utilisation de programmes PHP pour implémenter la fonction de région de requête d'adresse IP. Les lecteurs peuvent ajuster et optimiser en fonction de leurs propres besoins et des conditions réelles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn