简体   繁体   English

PHP检查IPAddress是否是本地的

[英]PHP check if IPAddress is local

Can i check if an ip is in a private network? 我可以检查一下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

Why is isLocalIPAddress('127.0.0.1') giving false instead of true ? 为什么isLocalIPAddress('127.0.0.1')给出false而不是true

Isn't 127.0.0.1 a private ip? 127.0.0.1不是私有IP吗?


UPDATE UPDATE

Solution I used: 解决方案我用过:

<?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 ) );
}

According to a test run , we can see that output for PHP 5.2.0 → 5.3.5 is false , while output for PHP 5.3.6 → 7.0.0beta1 and hhvm-3.3.1 → 3.8.0 is true . 根据测试运行 ,我们可以看到PHP 5.2.0→5.3.5的输出是false ,而PHP 5.3.6→7.0.0beta1和hhvm-3.3.1→3.8.0的输出是true

To solve your problem you can check for php version and if it is in the first range add: 要解决您的问题,您可以检查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 ) );
}
filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);

This is my production flags. 这是我的制作标志。 Private IP classes and loopback interfaces are not allowed here. 这里不允许使用私有IP类和环回接口。

According to http://www.php.net/manual/en/filter.filters.flags.php 127.0.0.1 is not included in either FILTER_FLAG_NO_PRIV_RANGE or FILTER_FLAG_NO_RES_RANGE. 根据http://www.php.net/manual/en/filter.filters.flags.php 127.0.0.1不包含在FILTER_FLAG_NO_PRIV_RANGE或FILTER_FLAG_NO_RES_RANGE中。

Edit: 编辑:

There is also a comment there on how to deal with loopback. 还有一个关于如何处理环回的评论。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM