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
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: 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 18:01:30 2024 UTC