IP & Domain to gethostbyname to preg_match


IP & Domain to gethostbyname to preg_match

我想要一个输入框,有人可以在其中输入域,它将验证域,然后将其转换为IP,然后验证IP。如果 IP 未验证,它将回显 no。

所以,我想知道这是最好的方法,还是有更好的方法?

$input = 'somedoaminhere.com';
$ValidIp = "/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/";
$parse = parse_url($input);
$ip = gethostbyname($parse['host']);
if (preg_match("$ValidIp", "$ip")) {
    echo "$ip";
} else {
    echo "none";
}

"然后验证 IP" 如果 IP 由 gethostbyname 返回,验证 IP 的意义何在,它应该是一个有效的 IP。

但是,我会这样做。

$ip = "127.0.0.300";

$octals = explode(".",$ip);
$isValid=true;
foreach($octals as $oct)
{
    if($oct<0 || $oct>255)
    {$isValid=false;}
}
if($isValid)
    {echo "Is Valid";}
else
    {echo "Is no Valid";}

您当然可以清理代码。 我一步一步地保持它,所以原因/步骤是显而易见的。

PHP 内置了一组强大的函数,用于验证和清理输入:

过滤器

如果您只是验证 IP 地址,请使用以下命令:

$ip = '1.2.3.4';
$f = filter_var($ip, FILTER_VALIDATE_IP);  // $f == '1.2.3.4'
$ip = '1.2.3.300';
$f = filter_var($ip, FILTER_VALIDATE_IP);  // $f == false

如果使用标志,则可以使用过滤器功能执行更多操作。例如,验证 IPV4 地址并排除专用范围:

$f = filter_var($ip, FILTER_VALIDATE_IP, array('flags'=>FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE));

如果您从gethostbyname()获取IP地址,则这样做毫无意义,因为这应该返回一个有效的地址。

您可以使用filter_*()函数执行更多操作,例如,在单个函数调用中以$_GET$_POST验证和清理所有用户数据。检查 PHP 参考