php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #14018 make ip2long and long2ip handle unsigned longs correctly
Submitted: 2001-11-11 13:15 UTC Modified: 2001-12-07 08:32 UTC
From: jan at kneschke dot de Assigned:
Status: Closed Package: Network related
PHP Version: 4.0.6 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: jan at kneschke dot de
New email:
PHP Version: OS:

 

 [2001-11-11 13:15 UTC] jan at kneschke dot de
Actually the my fix for this problem is on the PHP side, 
not in the PHP-code it self:


function jk_ip2long ($ip) {
    
preg_match("#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#", 
$ip, $a);

    $long = 
      $a[1] << 24 | 
      $a[2] << 16 |
      $a[3] <<  8 |
      $a[4] <<  0;
    
    ## handling negative urls
    if($long < 0) $long += pow(2,32); 
    
    return $long;
}

## long2ip

function jk_long2ip ($long) {
    ## handle long value which should be signed in PHP but 
are unsigned
    
    if ($long > 0x7fffffff) {
        ## although this code seems to be useless, it does 
what we want
        $l = ($long - 0x7fffffff) - 1;
        $long = -(0x7fffffff - $l) - 1;
    }
    
    
    $ip3 = sprintf("%d.%d.%d.%d",
                   $long >> 24 & 0xff,
                   $long >> 16 & 0xff,
                   $long >>  8 & 0xff,
                   $long >>  0 & 0xff
                   );
    return $ip3;
}

You can see a working example at

http://jan.kneschke.de/projects/phpbugs/ip2long.php


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-12-07 08:32 UTC] sterling@php.net
They work in the current CVS of php
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Jan 15 15:01:31 2025 UTC