On Tue, Jun 5, 2012 at 1:07 PM, jas <jason.gerfen@xxxxxxxxx> wrote: > On 06/04/2012 12:48 PM, Matijn Woudt wrote: >> >> On Mon, Jun 4, 2012 at 8:38 PM, jas<jason.gerfen@xxxxxxxxx> wrote: >>> >>> On 06/04/2012 11:33 AM, Matijn Woudt wrote: >>>> >>>> >>>> On Mon, Jun 4, 2012 at 6:54 PM, jas<jason.gerfen@xxxxxxxxx> wrote: >>>>> >>>>> >>>>> Not sure if this is a bug or not... >>>>> >>>>> I have run into an error when performing a conditional using iplong() >>>>> and >>>>> the ~ bitwise operator >>>>> >>>>> $ip = '0.0.0.0'; >>>>> $mask = '24'; >>>>> >>>>> $end = (ip2long($ip) || (~ip2long($mask))) + 1; >>>>> >>>>> PHP Fatal error: Unsupported operand types >>>>> >>>>> I even tried to typecast the mask to (int) >>>>> >>>> >>>> The error is probably not where you suspect it to be. ip2long will >>>> return false for ip2long($mask), because $mask is not a valid IP >>>> address. The ~ operator is not supported for false. >>>> >>>> - Matijn >>> >>> >>> >>> Strange... this works >>> >>> $ip = '10.0.2.0'; >>> $mask = '24'; >>> >>> Anything using 0.0.0.0 fails using the bitmask to calculate valid CIDR >>> ranges. >>> >> >> Yes, because with $ip being 0.0.0.0, the result of ip2long($ip) will >> be zero. Zero evaluates to false when PHP is going to parse the || >> operator, and because of that, it continues to parse the rest. >> When the result of ip2long($ip) is greater that zero, in case of some >> other valid IP, it will evaluate to true and PHP will not even execute >> the rest after the || because the result will be true anyway. >> Did you mean to use a single | operator, as a bitwise OR? >> >> - Matijn > > > With any ACL rule using iptables, hosts.allow/hosts.deny, routers where > 0.0.0.0/24 is specified (all of the internet ipv4 addresses) this is a valid > range using CIDR notation. > > It seems like a bug to me > Nope, there's no bug here. Can you explain what you're trying to do with ip2long($mask)? - Matijn -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php