De är nästan exakt likadana. ip2long returnerar ibland ett negativt värde eftersom PHP använder signerade siffror för värdering, medan MySQL använder osignerade.
Båda utvärderas som x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
, men i PHP, på grund av den långa signeringen, kommer att visa negativa värden för vissa IP-adresser.
For signed long, the range is
(2^31) - 1 = −2,147,483,648 to +2,147,483,647
Så adresser när de översätts till över +2 147 483 647 kommer att omslutas och ge negativa värden.
ip2long("254.254.254.254"); // -16843010
Denna länk beskriver detta i detalj.