PHP检查IPAddress是否是本地的

ar0*_*968 3 php ip networking

我可以检查一下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
Run Code Online (Sandbox Code Playgroud)

为什么要isLocalIPAddress('127.0.0.1')给予false而不是true?

127.0.0.1不是私有IP吗?


UPDATE

解决方案我用过:

<?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 ) );
}
Run Code Online (Sandbox Code Playgroud)

mam*_*dan 5

根据测试运行,我们可以看到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 ) );
}
Run Code Online (Sandbox Code Playgroud)

  • 我用我将使用的解决方案更新了问题. (2认同)