note 109779 added to function.inet-pton
| From: | SK at example dot com | Date: | Mon, 20 Aug 2012 12:21:13 +0000 |
| Subject: | note 109779 added to function.inet-pton | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-190140@lists.php.net to get a copy of this message | ||
I noticed that inet_pton() doesn't like compressed single hex groups
i.e. ::ffff:ffff:ffff:ffff:ffff:ffff:ffff and ::ffff:ffff:ffff:ffff:ffff:127.0.0.1
work around and/or PHP 4.0.1+ add-in:
<?php
function ip2bin($ip)
{
$s = $ipv4 = '';
if(strpos($ip, ':') !== false)
{
if(!($l = preg_match_all('#(?|::|(?|\d{1,3}\.){3}\d{1,3}|[0-9a-f]{1,4})#i', $ip, $m)) ||
$l > 8)
return false;
foreach($m[0] as $p)
{
if($p == '::')
$s .= str_repeat('0000', 8 - $l + (strpos($m[0][$l-1], '.') === false));
else if(strpos($p, '.') !== false)
$ipv4 = ip2bin($p);
else
$s .= str_pad($p, 4, '0', STR_PAD_LEFT);
}
if($ipv4 === false)
return false;
return pack('H*', $s). $ipv4;
}
else if(strpos($ip, '.') !== false)
{
$x = explode('.', $ip);
if(count($x) != 4)
return false;
foreach($x as $i)
$s .= chr((int) $i);
return $s;
}
return false;
}
var_dump(
@inet_pton('::ffff:ffff:ffff:ffff:ffff:ffff:ffff'), // bool(false)
ip2bin('::ffff:ffff:ffff:ffff:ffff:ffff:ffff'),
@inet_pton('::ffff:ffff:ffff:ffff:ffff:127.0.0.1'), // bool(false)
ip2bin('::ffff:ffff:ffff:ffff:ffff:127.0.0.1')
);
?>
----
Server IP: 69.147.83.197
Probable Submitter: 67.185.164.25
----
Manual Page -- http://www.php.net/manual/en/function.inet-pton.php
Edit -- https://master.php.net/note/edit/109779
Del: integrated -- https://master.php.net/note/delete/109779/integrated
Del: useless -- https://master.php.net/note/delete/109779/useless
Del: bad code -- https://master.php.net/note/delete/109779/bad+code
Del: spam -- https://master.php.net/note/delete/109779/spam
Del: non-english -- https://master.php.net/note/delete/109779/non-english
Del: in docs -- https://master.php.net/note/delete/109779/in+docs
Del: other reasons-- https://master.php.net/note/delete/109779
Reject -- https://master.php.net/note/reject/109779
Search -- https://master.php.net/manage/user-notes.php