Ce sont presque exactement les mêmes. ip2long renvoie parfois une valeur négative car PHP utilise des nombres signés pour l'évaluation, tandis que MySQL utilise des nombres non signés.
Les deux sont évalués comme x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
, mais en PHP, en raison de la longueur de la signature, affichera des valeurs négatives pour certaines adresses IP.
For signed long, the range is
(2^31) - 1 = −2,147,483,648 to +2,147,483,647
Ainsi, les adresses traduites en plus de +2 147 483 647 se refermeront et donneront des valeurs négatives.
ip2long("254.254.254.254"); // -16843010
Ce lien décrit cela en détail.