2015-01-18 3 views
0

Я хотел бы иметь окно ввода, в котором кто-то может ввести домен, и он будет проверять домен, а затем преобразовывать его в IP, а затем проверять IP. Если IP не проверяет, он не будет эхом.IP & Domain to gethostbyname to preg_match

Итак, мне интересно, если это лучший способ сделать это, или есть лучший способ сделать это?

$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"; 
} 
+0

Вернулся к исходной версии, потому что отредактированный вопрос настолько отличается от этого, что существующие ответы выглядят бессмысленными. –

ответ

1

«а затем проверить IP» Что такое точка подтверждения IP-если он возвращается gethostbyname он должен быть действительным 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";} 

Вы можете, конечно, очистить код. Я делал это шаг за шагом, чтобы причины/шаги были очевидны.

1

PHP имеет мощный набор функций, встроенных для проверки & санировать вход: Filter

Если вы только проверки 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)); 

Там мало смысл делать это, если вы получаете свой IP-адрес из gethostbyname(), так что должен возвращать правильный адрес.

Вы можете сделать намного больше с filter_*() функций, в том числе, например, проверки и дезинфицировать все ваши данные в $_GET или $_POST в вызове одной функции. Проверьте PHP Reference