> -----Original Message-----
> From: Andy McKenzie [mailto:[email protected]]
> Sent: 15 March 2011 15:51
>
> As it turns out, the most important lesson here is: "Don't trust
> what
> anyone tells you." The old server is 64-bit. The new server is
> 32-bit. Once I stopped to check that myself, it all became clear.
> For the archives, here's what happened.
>
> Everything worked fine until I ran bindec() on the binary netmask;
> at
> that point it returned a float rather than an int, as it it used to.
> Therefore, when I ran ip2long on the result, it choked, and returned
> bool(false). Which isn't really useful when you're trying to
> produce
> a human-readable netmask, when you get right down to it.
>
> I still don't have a solution that will work on a 32-bit server, but
> now that I know what's going on, I should be able to either find
> something that will work, or get things moved to a 64-bit machine.
You may have to use a replacement for bindec which employs bit-shifting
to get the result you want; something like:
function my_bindec($binstr)
{
$binlen = strlen($binstr);
$decval = 0;
for ($i=0; $i<$binlen; ++$i):
$decval = ($decval<<1) | ($binstr[$i]?1:0);
endfor;
return $decval;
}
Note: off the top of my head and completely UNTESTED!
Also, the constant 4294967295 quoted in your original message will
become a float value on a 32-bit system. It's actually a representation
of 32-bit -1, so either write it like that or use something like
ip2long('255.255.255.255') (or
my_bindec('11111111111111111111111111111111')!!!).
Cheers!
Mike
--
Mike Ford,
Electronic Information Developer, Libraries and Learning Innovation,
Leeds Metropolitan University, C507 City Campus,
Woodhouse Lane, LEEDS, LS1 3HE, United Kingdom
Email: [email protected]
Tel: +44 113 812 4730
To view the terms under which this email is distributed, please go to
http://disclaimer.leedsmet.ac.uk/email.htm
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php