Stockage et transformation des adresses ip
Par darksword le samedi, janvier 22 2005, 18:25 - programmation - Lien permanent
Transformation PHP
Un problème qui se pose souvent lors de la création de module permettant le suivi et l'analyse des visites est le stockage des adresses ip. En effet, différentes solutions sont envisageables. Faisons rapidement le tour de celles-ci :
Solution 1 : vérification simple
stockage direct de l'adresse ip.
Avantage : aucun coût de transformation et une grande visibilité.
Inconvénient : Stockage dans la base en varchar (la taille pouvant varier de 7 à 15 caractères). Coût de comparaison important.
Requis : explode : PHP >= 3
Solution 2 : codage hexadecimal
stockage de l'adresse en hexadecimal (base 16). Etant donné la spécificité de la plage d'adressage (de 0 à 255), on peut donc stocker l'adresse sur 8 caractères (exemple : 192.168.0.1 devient c0a801).
Avantage : stockage sur 8 caractères (fixe et reduit). Facile a convertir.
Inconvénient : Temps de comparaison encore long, temps de transformation long.
Requis : ctype_digit : PHP >= 4.0.4
Solution 3 : codage par décalage
stockage de l'adresse par décalage. On ajoute au fur et à mesure les quatres parties de l'adresse en opérant un décalage de 256 (é puissance 8) à chaque tour et en ajoutant la sous-partie suivante. (exemple : 192.168.0.1 devient 3198681089). Utilisation et uniformisation de la fonction ip2long en renvoyant false en cas de problème sur l'ip (et pas -1 en php 4 et false en php5).
avantage : facilite de comparaison, temps de conversion très rapide (trois fois plus rapide que ipv4_to_hex).
inconvenient : stockage de type long
Requis : ctype_digit : PHP >= 4.0.4
temps pour générer 25146 adresses (moyenne sur 5 essais)
Solution 1 : 0,446603489 sec
Solution 2 : 1.52481599808 sec
Solution 3 : 0,410049963 sec
Dès lors on peut envisager plusieurs hypothèses selon le type de traitement que l'on veut réaliser. Pour une consultation rapide des adresses, le stockage direct des ip peut être envisagé. Pour une taille de stockage minimale on peut passer par une compression de l'adresse en hexadécimal. Enfin pour une comparaison d'adresse : logs, surveillances, la transformation par décalage semble idéale.
Commentaires