Mafia II

ip2long() na 32bit systémech

Únor 8th, 2010

Funkce na převod IP adresy do číselného tvaru (ideální na ukládání a práci s rozsahy IP v DB) se nechová korektně na 32bit systémech. Ačkoli název napovídá, že vrací longint, na 32bitech vrací obyčejný int32, takze přeteče a začne vracet zápornou hodnotu, postupy jak to vyřešit jsou dva:

$ip = ip2long(‚194.108­.129.194‘);

if ($ip < 0) {
    $ip += 4294967296;
}

nebo

$prt = explode(‚.‘, ‚194.108.129.194‘);

$ip = 16777216*$prt[0] + 65536*$prt[1] + 256*$prt[2] + $prt[3];

Vložty komentář