ZetCode

PHP ip2long 函数

最后修改于 2025 年 4 月 4 日

PHP 的 ip2long 函数将人类可读的 IP 地址转换为长整型。这对于 IP 存储和范围比较很有用。

基本定义

ip2long 将 IPv4 地址从字符串转换为长整型。该整数可用于有效存储和 IP 地址操作。

语法:ip2long(string $ip): int|false。 失败时返回长整型或 false。 仅适用于 IPv4 地址,不适用于 IPv6。

基本 IP 转换

此示例演示了将 IP 地址转换为长整型的基本转换。

basic_conversion.php
<?php

declare(strict_types=1);

$ip = "192.168.1.1";
$long_ip = ip2long($ip);

echo "IP: $ip\n";
echo "Long: $long_ip\n";

输出显示了字符串 IP 及其长整型表示。 这种转换对于在数据库中进行紧凑存储很有用。

IP 地址验证

此示例展示了如何使用 ip2long 验证 IP 地址。

ip_validation.php
<?php

declare(strict_types=1);

function isValidIp($ip) {
    return ip2long($ip) !== false;
}

$test_ip = "256.0.0.1"; // Invalid IP
echo isValidIp($test_ip) ? "Valid" : "Invalid";

对于无效的 IP 地址,该函数返回 false。 请注意,由于 PHP 的转换,某些无效 IP 仍然可能返回一个长值。

IP 范围检查

这演示了检查 IP 是否属于特定范围。

ip_range_check.php
<?php

declare(strict_types=1);

$ip = "192.168.1.100";
$start = "192.168.1.1";
$end = "192.168.1.254";

$long_ip = ip2long($ip);
$long_start = ip2long($start);
$long_end = ip2long($end);

if ($long_ip >= $long_start && $long_ip <= $long_end) {
    echo "$ip is in range $start - $end";
} else {
    echo "$ip is NOT in range";
}

将 IP 转换为长整型可以对 IP 范围进行数值比较。这比基于字符串的范围检查更有效。

数据库中的 IP 存储

此示例展示了如何在数据库中将 IP 地址存储为整数。

ip_database_storage.php
<?php

declare(strict_types=1);

$ip = "10.0.0.5";
$long_ip = ip2long($ip);

// Using PDO for database connection
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO logs (ip_address) VALUES (?)");
$stmt->execute([$long_ip]);

echo "Stored IP: $ip as $long_ip";

将 IP 存储为整数可以节省空间并允许有效的范围查询。 记得在检索时使用 long2ip 进行转换回 IP 地址。

网络地址计算

此示例使用位运算计算网络地址。

network_calculation.php
<?php

declare(strict_types=1);

$ip = "192.168.1.100";
$mask = "255.255.255.0";

$long_ip = ip2long($ip);
$long_mask = ip2long($mask);

$network = $long_ip & $long_mask;
echo "Network address: " . long2ip($network);

这通过将 IP 与子网掩码进行 AND 运算来计算网络地址。 网络计算对于子网划分和路由至关重要。

最佳实践

来源

PHP ip2long 文档

本教程涵盖了 PHP ip2long 函数,并提供了用于 IP 地址操作、验证和存储的实际示例。

作者

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

列出 所有 PHP 网络函数