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 网络函数。