PHP检查IP是否在指定范围内
题目如下:
输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100~192.168.1.150范围内。
当时想出了两种方法,一种把字符串按照.来拆分成数组,一个个范围比较,一种去掉点之后比较数字大小,可是后者有个问题,要是他们的IP地址不符合格式怎么办,还是得变成数组,所以就干脆用了前者。
源代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CheckIP</title>
</head>
<body>
<h1>请输入IP地址</h1>
<p>将检查是否在192.168.1.100~192.168.1.150</p>
<form action="checkip.php" method="post">
<input type="text" name="ip" placeholder="请输入ip地址">
<input type="submit" name="submit" value="检查">
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$problem = FALSE;
if (empty($_POST['ip'])) {
echo '请输入ip地址';
$problem = TRUE;
}
if (!$problem) {
$array = explode('.', $_POST['ip']);
$counter = count($array);
if ($counter != 4) {
echo '你的IP地址格式不正确哟<br/>';
$problem = TRUE;
}
foreach ($array as $key => $value) {
str_replace(' ', '', $value);
if (!is_numeric($value)) {
echo 'IP地址由数字组成@-@识别不能<br/>';
$problem = TRUE;
break;
}
if ($key == 0) {
if($value < 1 || $value > 255) {
echo '第一个数字不能是0<br/>';
$problem = TRUE;
}
} else {
if ($value < 0 || $value > 255) {
echo '第一个数字以外必须在0-255之间<br/>';
$problem = TRUE;
break;
}
}
}
if (!$problem) {
if($array[0] == 192 && $array[1] == 168 && $array[2] == 1 && $array[3] >= 100 && $array[3] <= 150) {
echo '恭喜,在此范围内';
} else {
echo '=x=不在范围内哦';
}
}
}
}
?>
</body>
</html>
这里我们用explode()
切割字符串为数组。
扩展阅读:http://www.php.net/manual/zh/function.explode.php
为了避免用户多输入空格,我们使用str_replace(' ', '', $value)
把空格替换成空值,也就起到了字符串消除空格的效果
扩展阅读:http://www.php.net/manual/zh/function.str-replace.php
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。
这个算是比较整洁了,不过还可以再整洁。