我可以检查一下ip是否在私人网络中吗?
<?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
?
Isn&lt; 127.0.0.1私有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 ) );
}
答案 0 :(得分:5)
根据test run,我们可以看到PHP 5.2.0→5.3.5的输出是false
,而PHP 5.3.6→7.0.0beta1和hhvm-3.3.1的输出→3.8.0是true
。
要解决您的问题,您可以检查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 ) );
}
答案 1 :(得分:2)
filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
这是我的制作标志。这里不允许使用私有IP类和环回接口。
答案 2 :(得分:0)
根据http://www.php.net/manual/en/filter.filters.flags.php 127.0.0.1不包含在FILTER_FLAG_NO_PRIV_RANGE或FILTER_FLAG_NO_RES_RANGE中。
编辑:
还有一个关于如何处理环回的评论。