制作一个自己的二进制IP库文件_PHP教程
一、前言
有做过IP归属地查询功能的朋友应该都有听说过纯真IP库,纯真IP库查询类似这样:
若你仅需要根据IP搜索出用户的归属地文字然后显示出来,只要按照该IP库的规则进行二分查找并显示就OK了。(格式详解)
但如果你需要根据IP获取归属地文字描述,然后进一步与自己已有的行政地区数据表关联起来该如何处理呢?
粗看这两种应该是都可以实现,但是效率呢?都很差!特别是面对并发稍高的应用,这两种方式都经不起考验。
为什么不根据纯真IP库(其他IP库也可以)的数据与自己的地区数据关联起来,用自己的地区ID来代替纯真IP库的地区描述,最后制作一个自己的二进制IP库文件呢?
让我们进入正题,看看如何根据纯真IP库数据制作一个自己的二进制IP库文件。
注:本文只说明大致思路,没有详细代码,谢谢
二、准备工作
我们需要准备好两部分的数据:
1. 纯真IP库解压后的txt文件。
纯真IP库下载后会有个ip.exe工具,使用上面的解压即可生成。
生成的数据如图1-1,我这个版本有大概444290条。
图1-1
2. 自己的国家省市级联数据表。
这个网上应该比较多,自己进行导入,表结构类似(area_id, area_level, area_name, area_pid),分别代表地区ID,地区等级,地区名称,父地区ID。
当然你也可以自己使用不同的结构,不影响我们这次的处理。
三、过程
数据已经有了,现在来规划下我们需要生成的IP库的机构。
从标题中就知道,我们需要生成的IP库是二进制的数据包,而不是普通文本文件,那么我们的IP库文件结构应该是怎样的呢?
如图所示:
可以看到,我们的结构是这样的:
- 头部。位于文件的前8个字节。前4字节存放32位整数,值为数据部分的开始在文件中的位置;后4字节也存放32位整数,值为数据部分的结束在文件中的位置
- 主体数据部分。由N个固定结构体组成,每个结构体12字节,为一条IP范围数据(ip_start, ip_end, area_code)。结构体的三个部分也分别为32位有符号整数,各4字节。(area_code若是量小的话也可以使用1个字符)
IP数据包的结构已经定下来了,后面就是一步步处理了。
1. 逐条读取IP文本文件内容,IP转为32位有符号整数(自定义的ip2long),地区文字分析获取到最终地区
a. IP文本文件每行的规则为:前15字节为IP起始地址,后15字节为IP结束地址,最后为地区文字描述。
b. IP转为32位有符号整数只占4字节,且解决了PHP函数ip2long在32位与64位系统下值不同的问题,新的函数如下:
<span function</span> ip2Long32(<span $ip</span><span ) { </span><span $ip</span> = <span unpack</span>('l', <span pack</span>('l', <span ip2long</span>(<span $ip</span><span ))); </span><span return</span> <span $ip</span>[1<span ]; } </span><span //</span><span end func</span>
当然,你也可以自己开发PHP扩展,详见这边:http://www.cnblogs.com/iblaze/archive/2013/06/02/3112603.html
c. 地区需要获取到各级别地区名称(包括省、市、县、区等,这边国外只保留国家),正则如图:
2. 将获取到的地区信息转为地区ID
这部分处理我不太好描述,因为可能每个人用到的地区都不一样,但是大致原理就是先根据最低级地区名称去查找ID(看实际情况,有可能要去掉市、县之类),若是没有则查找上一级,如此循环,直到获取到地区ID。
若是没有查找到地区ID,则都归入未知。
3. 压缩,压缩后的文件约为5.08M
压缩规则如图,format中的值对应pack中的类型:
这边有个地方必须提示下,由于IP转为有符号32位整数,则128.0.0.0以后的IP都会为负数,所以需要判断负数,并放入我们IP库的前面去,毕竟是使用二分查找,需要为有序数据。
4. 查找IP,使用二分查找,44W条数据最多只需要搜索19次,类似如下:
4. 单个测试,看起来速度还可以
5. 简单压测看效果
a. ab压测,使用本机的ab
b. 测试脚本在linux测试机(普通PC机)
c. 压测脚本如下:
d. 压测语句: ab -n 10000 -c 50 http://192.168.206.71/ipdata.php?type=php
表现还不错。呵呵
结束了,有什么更好的方式可以一起讨论下,谢谢~

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lors de la suppression ou de la décompression d'un dossier sur votre ordinateur, une boîte de dialogue d'invite « Erreur 0x80004005 : erreur non spécifiée » apparaît parfois. Comment devez-vous résoudre cette situation ? Il existe en fait de nombreuses raisons pour lesquelles le code d'erreur 0x80004005 est demandé, mais la plupart d'entre elles sont causées par des virus. Nous pouvons réenregistrer la DLL pour résoudre le problème. Ci-dessous, l'éditeur vous expliquera l'expérience de gestion du code d'erreur 0x80004005. . Certains utilisateurs reçoivent le code d'erreur 0X80004005 lors de l'utilisation de leur ordinateur. L'erreur 0x80004005 est principalement due au fait que l'ordinateur n'enregistre pas correctement certains fichiers de bibliothèque de liens dynamiques ou à un pare-feu qui n'autorise pas les connexions HTTPS entre l'ordinateur et Internet. Alors que diriez-vous

Quark Netdisk et Baidu Netdisk sont actuellement les logiciels Netdisk les plus couramment utilisés pour stocker des fichiers. Si vous souhaitez enregistrer les fichiers de Quark Netdisk sur Baidu Netdisk, comment procéder ? Dans ce numéro, l'éditeur a compilé les étapes du didacticiel pour transférer des fichiers d'un ordinateur Quark Network Disk vers Baidu Network Disk. Voyons comment le faire fonctionner. Comment enregistrer les fichiers du disque réseau Quark sur le disque réseau Baidu ? Pour transférer des fichiers de Quark Network Disk vers Baidu Network Disk, vous devez d'abord télécharger les fichiers requis depuis Quark Network Disk, puis sélectionner le dossier cible dans le client Baidu Network Disk et l'ouvrir. Ensuite, faites glisser et déposez les fichiers téléchargés depuis Quark Cloud Disk dans le dossier ouvert par le client Baidu Cloud Disk, ou utilisez la fonction de téléchargement pour ajouter les fichiers sur Baidu Cloud Disk. Assurez-vous de vérifier si le fichier a été transféré avec succès dans Baidu Cloud Disk une fois le téléchargement terminé. C'est ça

Récemment, de nombreux internautes ont demandé à l'éditeur : quel est le fichier hiberfil.sys ? hiberfil.sys peut-il occuper beaucoup d’espace sur le disque C et être supprimé ? L'éditeur peut vous indiquer que le fichier hiberfil.sys peut être supprimé. Jetons un coup d'œil aux détails ci-dessous. hiberfil.sys est un fichier caché dans le système Windows et également un fichier d'hibernation du système. Il est généralement stocké dans le répertoire racine du lecteur C et sa taille est équivalente à la taille de la mémoire installée du système. Ce fichier est utilisé lorsque l'ordinateur est en veille prolongée et contient les données de mémoire du système actuel afin qu'il puisse être rapidement restauré à son état précédent lors de la récupération. Étant donné que sa taille est égale à la capacité de la mémoire, il peut occuper une plus grande quantité d’espace sur le disque dur. hiberner

En tant que l'une des plateformes de vidéos courtes les plus populaires en Chine, Douyin a attiré un grand nombre d'utilisateurs et de fans. Sur TikTok, on entend souvent parler de fans et d'amis, mais savez-vous quelle est la différence entre les fans et les amis de TikTok ? Cette question recevra une réponse détaillée ci-dessous. 1. Quelle est la différence entre les fans et les amis de Douyin ? Sur TikTok, les fans sont des personnes intéressées par votre contenu et qui choisissent de vous suivre. Ils interagiront avec vous via des likes, des commentaires, etc. pour établir une connexion virtuelle. Les amis, quant à eux, sont des personnes qui se connaissent dans la vraie vie et entretiennent de véritables relations sociales entre elles. Sur les plateformes sociales comme Douyin, les méthodes et la profondeur des interactions entre fans et amis peuvent varier, mais ce sont toutes des éléments importants dans la construction et le maintien d'un réseau social. Le nombre de fans fait référence à ceux qui suivent votre compte

1. Démarrez PPT, créez un nouveau document vierge, sélectionnez toutes les zones de texte et supprimez-les. 2. Exécutez la commande Insérer une forme, faites glisser un rectangle dans le document et remplissez la forme de noir. 3. Faites glisser le rectangle pour l'allonger, exécutez la commande Insérer-Forme, faites glisser le petit carré et définissez la couleur de remplissage sur blanc. 4. Copiez et collez les petits carrés un par un afin que le haut et le bas soient répartis uniformément des deux côtés du film. Après les avoir tous sélectionnés avec ctrl+a, faites un clic droit et sélectionnez Groupe. 5. Exécutez la commande Insérer une image, recherchez l'image à insérer dans la boîte de dialogue contextuelle, cliquez pour l'ouvrir et ajustez la taille et la position de l'image. 6. Répétez l'étape 5 pour insérer et définir les images restantes afin de former une image de film. 7. Sélectionnez le film, exécutez la commande animation-ajouter une animation

Explication détaillée du rôle des fichiers .ibd dans MySQL et précautions associées MySQL est un système de gestion de base de données relationnelle populaire, et les données de la base de données sont stockées dans différents fichiers. Parmi eux, le fichier .ibd est un fichier de données du moteur de stockage InnoDB, utilisé pour stocker des données et des index dans des tables. Cet article fournira une analyse détaillée du rôle du fichier .ibd dans MySQL et fournira des exemples de code pertinents pour aider les lecteurs à mieux comprendre. 1. Le rôle des fichiers .ibd : stockage des données : les fichiers .ibd sont du stockage InnoDB

Travailler avec des fichiers dans le système d'exploitation Linux nécessite l'utilisation de diverses commandes et techniques qui permettent aux développeurs de créer et d'exécuter efficacement des fichiers, du code, des programmes, des scripts et d'autres éléments. Dans l'environnement Linux, les fichiers portant l'extension « .a » sont d'une grande importance en tant que bibliothèques statiques. Ces bibliothèques jouent un rôle important dans le développement de logiciels, permettant aux développeurs de gérer et de partager efficacement des fonctionnalités communes sur plusieurs programmes. Pour un développement logiciel efficace dans un environnement Linux, il est crucial de comprendre comment créer et exécuter des fichiers « .a ». Cet article explique comment installer et configurer de manière complète le fichier Linux « .a ». Explorons la définition, l'objectif, la structure et les méthodes de création et d'exécution du fichier Linux « .a ». Qu'est-ce que L

Lors de la création d'un PPT, l'utilisation de certains effets d'animation le rendra plus vivant et plus mignon que sans l'utilisation d'effets d'animation. Avec l'ajout d'effets d'animation, les gens aimeront peut-être regarder ce PPT, nous devons donc apprendre à créer des effets d'animation pour PPT. Ensuite, je présenterai en détail comment ajouter des effets d'animation à PPT. Veuillez continuer à lire et étudier attentivement ces étapes, je pense qu’elles vous seront utiles ! Tout d'abord, ouvrez le PPT que nous avons créé nous-mêmes. Vous remarquerez que ce PPT n'a actuellement aucun effet d'animation (comme le montre la flèche rouge dans la figure ci-dessous). 2. Ensuite, nous devons ajouter des effets d'animation à l'image. Nous sélectionnons d'abord l'image, puis cliquons sur le bouton [Animation] en haut de la barre de menu (comme indiqué dans le cercle rouge dans la figure ci-dessous). 3. Ensuite, nous cliquons à l'intérieur de l'animation
