Ze zijn bijna precies hetzelfde. ip2long geeft soms een negatieve waarde terug omdat PHP getekende getallen gebruikt voor waardering, terwijl MySQL unsigned gebruikt.
Beide worden geëvalueerd als x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
, maar zal in PHP, vanwege de lange ondertekening, negatieve waarden weergeven voor bepaalde IP-adressen.
For signed long, the range is
(2^31) - 1 = −2,147,483,648 to +2,147,483,647
Dus, adressen die vertaald zijn naar meer dan +2.147.483.647 zullen rondlopen en negatieve waarden geven.
ip2long("254.254.254.254"); // -16843010
Deze link beschrijft dit in detail.