我可以检查一个 ip 是否在私有(private)网络中吗?
<?php
function isLocalIPAddress($IPAddress)
{
return ( !filter_var($IPAddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) );
}
var_dump( isLocalIPAddress('127.0.0.1') ); // false
var_dump( isLocalIPAddress('192.168.1.20') ); // true
var_dump( isLocalIPAddress('64.233.160.0') ); // false
为什么 isLocalIPAddress('127.0.0.1')
给出的是 false
而不是 true
?
127.0.0.1不是私有(private)ip吗?
更新
我使用的解决方案:
<?php
function isLocalIPAddress($IPAddress)
{
if( strpos($IPAddress, '127.0.') === 0 )
return true;
return ( !filter_var($IPAddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) );
}
最佳答案
根据 test run ,我们可以看到 PHP 5.2.0 → 5.3.5 的输出是 false
,而 PHP 5.3.6 → 7.0.0beta1 和 hhvm-3.3.1 → 3.8.0 的输出是 是的
。
要解决您的问题,您可以检查 php 版本,如果它在第一个范围内,请添加:
function isLocalIPAddress($IPAddress)
{
if($IPAddress == '127.0.0.1'){return true;} <-- add this
return ( !filter_var($IPAddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) );
}
关于PHP 检查 IPAddress 是否是本地的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24043400/