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是不是是本地的的主要内容,如果未能解决你的问题,请参考以下文章

检查设备是不是为 iPad

检查 Phonegap 应用程序是不是在 iPad 或 iPhone 上运行

检查是不是使用 JavaScript 在 iPad 中加载视频

php获取客户端公网ip代码

如何检查 UIDocumentInteractionController 是不是由于 iPad 上缺少外部应用程序而无法打开文档?

检查 NFS 共享是不是在 PHP 中启动