ZetCode

PHP inet_pton 函数

最后修改于 2025 年 4 月 4 日

PHP 的 inet_pton 函数将人类可读的 IP 地址转换为打包的二进制字符串。它对于网络编程和存储至关重要。

基本定义

inet_pton 将 IPv4 和 IPv6 地址从文本转换为二进制。它代表“互联网表示到网络”格式转换。

语法:inet_pton(string $ip): string|false。成功时返回二进制字符串,输入无效时返回 false。可用于两个 IP 版本。

转换 IPv4 地址

此示例演示了将标准 IPv4 地址转换为二进制。

ipv4_conversion.php
<?php

declare(strict_types=1);

$ip = "192.168.1.1";
$binary = inet_pton($ip);

if ($binary !== false) {
    echo "Binary representation: " . bin2hex($binary);
} else {
    echo "Invalid IP address";
}

该函数将“192.168.1.1”转换为 4 字节的二进制字符串。我们使用 bin2hex 将二进制以可读的十六进制格式显示。

转换 IPv6 地址

这展示了如何将 IPv6 地址转换为其二进制表示。

ipv6_conversion.php
<?php

declare(strict_types=1);

$ip = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
$binary = inet_pton($ip);

if ($binary !== false) {
    echo "Binary representation: " . bin2hex($binary);
} else {
    echo "Invalid IP address";
}

IPv6 地址转换为 16 字节的二进制字符串。该示例显示了一个有效的压缩格式的 IPv6 地址正在被转换。

验证 IP 地址

此示例使用 inet_pton 来验证 IPv4 和 IPv6。

ip_validation.php
<?php

declare(strict_types=1);

function isValidIP($ip) {
    return inet_pton($ip) !== false;
}

$testIPs = ["192.168.1.1", "256.0.0.1", "2001:db8::1", "invalid"];

foreach ($testIPs as $ip) {
    $valid = isValidIP($ip) ? "valid" : "invalid";
    echo "$ip is $valid\n";
}

该函数检查 inet_pton 是否返回非 false。这可以验证两个 IP 版本,而无需单独的检查。

比较 IP 地址

这演示了转换到二进制后比较 IP 地址。

ip_comparison.php
<?php

declare(strict_types=1);

$ip1 = "192.168.001.001";
$ip2 = "192.168.1.1";

$bin1 = inet_pton($ip1);
$bin2 = inet_pton($ip2);

if ($bin1 && $bin2) {
    echo $bin1 === $bin2 ? "Same IP" : "Different IPs";
} else {
    echo "Invalid IP(s) provided";
}

二进制比较可以处理同一 IP 的不同文本表示。前导零和格式差异不会影响比较。

在数据库中存储 IP

此示例显示了如何以二进制格式高效地存储 IP 地址。

ip_storage.php
<?php

declare(strict_types=1);

$ip = "203.0.113.45";
$binaryIP = inet_pton($ip);

if ($binaryIP !== false) {
    // Store in database as BINARY(16) for both IPv4 and IPv6
    $pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
    $stmt = $pdo->prepare("INSERT INTO logs (ip) VALUES (?)");
    $stmt->execute([$binaryIP]);
    echo "IP stored successfully";
}

以二进制格式存储 IP 可以节省空间并允许高效比较。同一列可以存储 IPv4 和 IPv6 地址。

最佳实践

来源

PHP inet_pton 文档

本教程通过 IP 地址转换、验证和存储的实际示例,介绍了 PHP inet_pton 函数。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出 所有 PHP 网络函数