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 运算来计算网络地址。 网络计算对于子网划分和路由至关重要。
最佳实践
- 验证: 始终在转换前验证 IP
- 存储: 考虑使用无符号整数进行存储
- IPv6: 对 IPv6 地址使用其他函数
- 字节序: 注意平台字节序差异
- 负值: 处理潜在的负整数
来源
本教程涵盖了 PHP ip2long 函数,并提供了用于 IP 地址操作、验证和存储的实际示例。
作者
列出 所有 PHP 网络函数。