php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #13914 echo ip2long($ip) differs from printf ("%u\n", ip2long ($ip));
Submitted: 2001-11-03 11:27 UTC Modified: 2001-11-03 13:38 UTC
From: ravenhead at mail dot ru Assigned:
Status: Closed Package: Output Control
PHP Version: 4.0.6 OS: Windows 2000 SP 2
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: ravenhead at mail dot ru
New email:
PHP Version: OS:

 

 [2001-11-03 11:27 UTC] ravenhead at mail dot ru
There are two examples in PHP MANUAL of ip2long() usage.
The first one is based on echo output and the second - on printf() function. These are examples with output:

<?
$ip = gethostbyname("www.php.net");
$out = "The following URLs are equivalent:<br>\n";
$out .= "http://www.php.net/, http://".$ip."/, and http://".ip2long($ip)."/<br>\n";
echo $out;
?>

The output of above is:
////////////////////////////////////////////////////////
The following URLs are equivalent:
http://www.php.net/, http://208.210.50.161/, and http://-791530847/
////////////////////////////////////////////////////////

I was confused on $ip output (i supposed ip-numbers are unsigned integers and cannot contain negative values like -791530847, echoed above). So, i've tryed to run the second example, wich uses printf() function:

<?php
$ip = gethostbyname("www.php.net");
printf ("%u\n", ip2long ($ip));
echo $out;
?>

The output is:
///////////
3503436449
///////////

I've changed code different ways, 've restarted machine, Apache server, but the difference remains. So, i've decided it's a bug either of echo or of ip2long() functions.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-11-03 13:38 UTC] derick@php.net
This is actually not a bug. PHP only has signed integers (32 bit), that means that an IP address doesn't fit into that.
echo $ipaddy; will show the number, ie. the signed integer. However, the 'special' modifier %u does circumvent this problem, but just outputting the number in unsigned form.

Derick
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Dec 27 03:01:28 2024 UTC