• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • inet_ntop()

    (PHP 5 >= 5.1.0, PHP 7)

    Converts a packed internet address to a human readable representation

    说明

    inet_ntop(string $in_addr): string

    This function converts a 32bit IPv4, or 128bit IPv6 address (if PHP was built with IPv6 support enabled) into an address family appropriate string representation.

    参数

    $in_addr

    A 32bit IPv4, or 128bit IPv6 address.

    返回值

    Returns a string representation of the address 或者在失败时返回FALSE.

    范例

    Example #1inet_ntop()Example

    <?php
    $packed = chr(127) . chr(0) . chr(0) . chr(1);
    $expanded = inet_ntop($packed);
    /* Outputs: 127.0.0.1 */
    echo $expanded;
    $packed = str_repeat(chr(0), 15) . chr(1);
    $expanded = inet_ntop($packed);
    /* Outputs: ::1 */
    echo $expanded;
    ?>
    

    更新日志

    版本说明
    5.3.0This function is now available on Windows platforms.

    参见

    • long2ip() 将长整型转化为字符串形式带点的互联网标准格式地址(IPV4)
    • ip2long() 将 IPV4 的字符串互联网协议转换成长整型数字
    • inet_pton()Converts a human readable IP address to its packed in_addr representation
    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
    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.
    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 !
    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] )
    ---

    上篇:http_response_code()

    下篇:inet_pton()