> -----Original Message----- > From: Andy McKenzie [mailto:amckenzie4@xxxxxxxxx] > 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: m.ford@xxxxxxxxxxxxxx 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