PHP检查IPAddress是不是是本地的
Posted
技术标签:
【中文标题】PHP检查IPAddress是不是是本地的【英文标题】:PHP check if IPAddress is localPHP检查IPAddress是否是本地的 【发布时间】:2014-07-25 10:55:48 【问题描述】:我可以检查一个 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
?
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 ) );
【问题讨论】:
【参考方案1】:根据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 ) );
【讨论】:
我已经用我将使用的解决方案更新了问题。 @ar099968 - 应该这样做,很高兴我帮助了【参考方案2】:filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
这是我的生产标志。此处不允许使用私有 IP 类和环回接口。
【讨论】:
【参考方案3】:根据http://www.php.net/manual/en/filter.filters.flags.php 127.0.0.1 不包含在 FILTER_FLAG_NO_PRIV_RANGE 或 FILTER_FLAG_NO_RES_RANGE 中。
编辑:
那里还有一条关于如何处理环回的评论。
【讨论】:
您正在处理的评论是 3 岁,并且 127.0.0.1 是在更高版本的 php 中添加的 是的,但是他有可能使用的是旧版本的 PHP,因为它不适合他。 是的,可能有,但您的回答没有解决这个问题。你需要提到这两种情况:)以上是关于PHP检查IPAddress是不是是本地的的主要内容,如果未能解决你的问题,请参考以下文章
检查 Phonegap 应用程序是不是在 iPad 或 iPhone 上运行
检查是不是使用 JavaScript 在 iPad 中加载视频
如何检查 UIDocumentInteractionController 是不是由于 iPad 上缺少外部应用程序而无法打开文档?