Sono quasi esattamente la stessa cosa. ip2long a volte restituisce un valore negativo perché PHP usa numeri con segno per la valutazione, mentre MySQL usa numeri senza segno.
Entrambi sono valutati come x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
, ma in PHP, a causa della lunga durata della firma, mostrerà valori negativi per determinati indirizzi IP.
For signed long, the range is
(2^31) - 1 = −2,147,483,648 to +2,147,483,647
Pertanto, gli indirizzi mentre vengono tradotti in oltre +2.147.483.647 si avvolgeranno e forniranno valori negativi.
ip2long("254.254.254.254"); // -16843010
Questo link lo descrive in dettaglio.