For people who wondering what the meaning of this function name:
pton: a presentation(printable) format address to network address
ntop: a network address to presentation(printable) format address
inet_ntop
(PHP 5 >= 5.1.0)
inet_ntop — Convertit un paquet d'adresses internet en une représentation humainement lisible
Description
string inet_ntop
( string
$in_addr
)Convertit une adresse 32 bit IPv4 ou 128 bit IPv6 (si PHP a été compilé avec le support IPv6) en une chaîne représentant une famille d'adresses.
Liste de paramètres
-
in_addr -
Une adresse 32 bit IPv4, ou 128 bit IPv6.
Valeurs de retour
Retourne une représentation de l'adresse, sous la forme d'une chaîne de caractères ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec inet_ntop()
<?php
$packed = chr(127) . chr(0) . chr(0) . chr(1);
$expanded = inet_ntop($packed);
/* Affiche : 127.0.0.1 */
echo $expanded;
$packed = str_repeat(chr(0), 15) . chr(1);
$expanded = inet_ntop($packed);
/* Affiche : ::1 */
echo $expanded;
?>
Historique
| Version | Description |
|---|---|
| 5.3.0 | Cette fonction est maintenant disponible sur les plate-formes Windows. |
Voir aussi
- long2ip() - Convertit une adresse IP (IPv4) en adresse IP numérique
- ip2long() - Convertit une chaîne contenant une adresse (IPv4) IP numérique en adresse littérale
- inet_pton() - Convertit une adresse IP lisible en sa représentation in_addr
ryansun81 at gmail dot com ¶
2 years ago
PandoraBox2007 at gmail dot com ¶
1 year ago
Before inet_pton nice work
//2001:0db8:85a3:0000:0000:8a2e:0370:7334
After
//2001:db8:85a3::8a2e:370:7334
no need compare compress data
string inet_ntop ( string $in_addr [, bool $compress = false] )
---
MagicalTux at FF dot st ¶
8 years ago
For people who need this function but don't have it, I could write a function which should give almost the same result.
<?php
function my_inet_ntop($ip) {
if (strlen($ip)==4) {
// ipv4
list(,$ip)=unpack('N',$ip);
$ip=long2ip($ip);
} elseif(strlen($ip)==16) {
// ipv6
$ip=bin2hex($ip);
$ip=substr(chunk_split($ip,4,':'),0,-1);
$ip=explode(':',$ip);
$res='';
foreach($ip as $seg) {
while($seg{0}=='0') $seg=substr($seg,1);
if ($seg!='') {
$res.=($res==''?'':':').$seg;
} else {
if (strpos($res,'::')===false) {
if (substr($res,-1)==':') continue;
$res.=':';
continue;
}
$res.=($res==''?'':':').'0';
}
}
$ip=$res;
}
return $ip;
}
?>
I followed IPv6 reprenstation rules :
- A series of "0"s in a 16bit block can by represented by "0".
- A series of blocks containing only "0"s can be suppressed and represented by "::" (this can be done only once)
(source : http://www.ipv6style.jp/en/faq/latest.shtml#2003022112 )
Example:
<?php
$packed = str_repeat(chr(0), 15) . chr(1);
$expanded = my_inet_ntop($packed);
/* Outputs: ::1 */
echo $expanded;
?>
I checked in CVS (2005-04-25) and didn't find the inet_ntop function (I really needed to handle IPv6) so I implemented it myself !
mirko dot steiner at slashdevslashnull dot de ¶
8 years ago
i've used this nice one oneline code:
<?PHP
$one = 192;
$two = 168;
$three = 1;
$four = 1;
$ip = $one*pow(256,3) + $two*pow(256,2) + $three*pow(256,1) + $four*pow(256,0);
echo $ip;
?>
you can also put the first one, shift them by 24 bits to the right, take the secod and shift them by 16, the 3rd by 8 and put thouse all together bitwise...
