Maison > Article > développement back-end > Solution aux pièges PHP crc32
Quels pièges le crc32 de PHP rencontrera-t-il ? Comment le résoudre ? Cet article présente principalement les problèmes auxquels il faut prêter attention lors de l'utilisation de la fonction crc32 de PHP. J'espère que cela sera utile à tous ceux qui utilisent crc32.
J'ai écrit un programme de fractionnement de table il y a quelques jours. L'algorithme de hachage utilisé est crc32. La fonction de fractionnement de table est la suivante :
function _getHash($username) { $hash = crc32($username) % 512; return $hash; } function _getTable($username) { $hash = self::_getHash($username); return 'user_' . $hash; }
.
Tout d'abord, générez les données sur la machine Windows locale 32 bits et insérez-les dans la table correspondante. Mais lorsque j'ai transféré le programme et les données sur le serveur (64 pour Linux), j'ai constaté que les données étaient introuvables. Après enquête, il a été découvert que les résultats crc32 sur le serveur étaient différents de ceux localement. Après avoir vérifié à nouveau le manuel PHP, j'ai découvert que l'interface crc32 est liée à la machine.
Description du manuel PHP :
Because PHP's integer type is signed many crc32 checksums will result in negative integers on 32bit platforms. On 64bit installations all crc32() results will be positive integers though.
Le résultat renvoyé par crc32 va déborder sur une machine 32 bits, le résultat peut donc être un nombre négatif. Sur une machine 64 bits, il n’y a pas de débordement, il est donc toujours positif.
L'algorithme CRC est calculé en fonction du nombre de bits dans la longueur du mot.
La fonction crc32 calculera PHP_INT_SIZE et PHP_INT_MAX en fonction des deux références constantes dans php
La définition de ces deux constantes :
La longueur en mots du nombre entier dépend de la plateforme, bien que la longueur maximale la valeur est généralement d'environ deux milliards (signé 32 bits). PHP ne prend pas en charge les entiers non signés. La longueur de mot d'une valeur entière peut être représentée par la constante PHP_INT_SIZE Depuis PHP 4.4.0 et PHP 5.0.5, la valeur maximale peut être représentée par la constante PHP_INT_MAX.
Sortie PHP_INT_SIZE : 4, PHP_INT_MAX : 2147483647 en 32 bits 🎜>Recommandations associées :
CRC32, C'est facile d'entrer en conflit, comment y faire face ?
Comment. utilisez la fonction crc32 en PHP pour vérifier les données
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!