If you want to use the above function you should test for ':' character before '.'. Meaning, you should check if it's an ipv6 address before checking for ipv4.
Why? IPv6 allows this type of notation:
::127.0.0.1
If you check for '.' character you will think this is an ipv4 address and it will fail.
inet_pton
(PHP 5 >= 5.1.0)
inet_pton — Konvertiert eine IP-Adresse im menschenlesbaren Format in eine komprimierte in_addr-Repräsentation
Beschreibung
string inet_pton
( string
$address
)Die Funktion konvertiert eine menschenlesbare IPv4- oder IPv6-Adresse (sofern PHP mit IPv6-Support kompiliert wurde) in eine für die Adressfamilie geeignete 32-bittige oder 128-bittige Binärstruktur.
Parameter-Liste
-
address -
Eine menschenlesbare IPv4- oder IPv6-Adresse.
Rückgabewerte
Gibt die in_addr-Representation der übergebenen
address zurück.
Beispiele
Beispiel #1 inet_pton()-Beispiel
<?php
$in_addr = inet_pton('127.0.0.1');
$in6_addr = inet_pton('::1');
?>
Changelog
| Version | Beschreibung |
|---|---|
| 5.3.0 | Die Funktion steht jetzt auch auf Windowsplattformen zur Verfügung. |
Siehe auch
- ip2long() - Verwandelt eine gemäß IPv4-Protokoll angegebene Internet-Adresse vom Punkt-Format in die ausgeschriebene Adress-Angabe
- long2ip() - Konvertiert eine (IPv4) Netzwerkadresse in einen String, der das Punkt-Format enthält ("Dotted-Format")
- inet_ntop() - Konvertiert eine komprimierte Internetadresse in ein menschenlesbares Format
inet_pton
me at diogoresende dot net
16-May-2006 11:34
16-May-2006 11:34
djmaze(AT)dragonflycms(.)org
14-Dec-2005 09:01
14-Dec-2005 09:01
If you need the functionality but your PHP version doesn't have the functionality (like on windows) the following might help
<?php
function inet_pton($ip)
{
# ipv4
if (strpos($ip, '.') !== FALSE) {
$ip = pack('N',ip2long($ip));
}
# ipv6
elseif (strpos($ip, ':') !== FALSE) {
$ip = explode(':', $ip);
$res = str_pad('', (4*(8-count($ip))), '0000', STR_PAD_LEFT);
foreach ($ip as $seg) {
$res .= str_pad($seg, 4, '0', STR_PAD_LEFT);
}
$ip = pack('H'.strlen($res), $res);
}
return $ip;
}
?>