PHP 8.4.0 RC2 available for testing

inet_ntop

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

inet_ntopBir IP adresinin in_addr gösterimini insan okuyabilir gösterime dönüştürür

Açıklama

inet_ntop(string $ip): string|false

Bu işlev 32 bitlik IPv4 veya (PHP, IPv6 desteğiyle derenmişse) 128 bitlik IPv6 adresini dizge gösterimli uygun bir adres ailesine dönüştürür.

Bağımsız Değişkenler

ip

32 bitlik IPv4 veya 128 bitlik IPv6 adresi

Dönen Değerler

Başarısızlık durumunda false, aksi takdirde adresin dizge gösterimiyle döner.

Örnekler

Örnek 1 - inet_ntop() örneği

<?php
$ikil
= chr(127) . chr(0) . chr(0) . chr(1);
$dizge = inet_ntop($packed);

/* Çıktısı: 127.0.0.1 */
echo $dizge;

$ikil = str_repeat(chr(0), 15) . chr(1);
$dizge = inet_ntop($packed);

/* Çıktısı: ::1 */
echo $dizge;
?>

Ayrıca Bakınız

  • long2ip() - Bir uzun tamsayılı IPv4 adresini noktalı gösterimi içeren bir dizgeye dönüştürür
  • ip2long() - Noktalı IP adresi gösterimini içeren bir dizgeyi uzun tamsayıya dönüştürür
  • inet_pton() - İnsan okuyabilir bir IP adresini in_addr gösterimine dönüştürür

add a note

User Contributed Notes 3 notes

up
52
ryansun81 at gmail dot com
14 years ago
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
up
6
marcus at synchromedia dot co dot uk
9 years ago
PHP's inet_ntop function is not compatible with the binary representation used by MySQL's INET6_ATON function, assuming you are using the recommended method of storing both IPv4 and IPv6 addresses in a VARBINARY(16) field. You need to convert it like this:

/**
* Convert a MySQL binary v4 (4-byte) or v6 (16-byte) IP address to a printable string.
* @param string $ip A binary string containing an IP address, as returned from MySQL's INET6_ATON function
* @return string Empty if not valid.
*/
function inet6_ntop($ip) {
$l = strlen($ip);
if ($l == 4 or $l == 16) {
return inet_ntop(pack('A' . $l, $ip));
}
return '';
}

You don't need a function going the other way because MySQL's INET6_NTOA is already compatible with PHP's inet_pton function.
up
-1
MagicalTux at FF dot st
19 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 !
To Top