PHP检查IP是否在指定范围内
题目如下: 输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100~192.168.1.150范围内。
当时想出了两种方法,一种把字符串按照.来拆分成数组,一个个范围比较,一种去掉点之后比较数字大小,可是后者有个问题,要是他们的IP地址不符合格式怎么办,还是得变成数组,所以就干脆用了前者。
源代码:
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <title>CheckIP</title>
6</head>
7<body>
8 <h1>请输入IP地址</h1>
9 <p>将检查是否在192.168.1.100~192.168.1.150</p>
10 <form action="checkip.php" method="post">
11 <input type="text" name="ip" placeholder="请输入ip地址">
12 <input type="submit" name="submit" value="检查">
13 </form>
14
15 <?php
16 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
17 $problem = FALSE;
18
19 if (empty($_POST['ip'])) {
20 echo '请输入ip地址';
21 $problem = TRUE;
22 }
23
24 if (!$problem) {
25 $array = explode('.', $_POST['ip']);
26 $counter = count($array);
27
28 if ($counter != 4) {
29 echo '你的IP地址格式不正确哟<br/>';
30 $problem = TRUE;
31 }
32
33 foreach ($array as $key => $value) {
34 str_replace(' ', '', $value);
35
36 if (!is_numeric($value)) {
37 echo 'IP地址由数字组成@-@识别不能<br/>';
38 $problem = TRUE;
39 break;
40 }
41
42 if ($key == 0) {
43 if($value < 1 || $value > 255) {
44 echo '第一个数字不能是0<br/>';
45 $problem = TRUE;
46 }
47 } else {
48 if ($value < 0 || $value > 255) {
49 echo '第一个数字以外必须在0-255之间<br/>';
50 $problem = TRUE;
51 break;
52 }
53 }
54 }
55
56 if (!$problem) {
57 if($array[0] == 192 && $array[1] == 168 && $array[2] == 1 && $array[3] >= 100 && $array[3] <= 150) {
58 echo '恭喜,在此范围内';
59 } else {
60 echo '=x=不在范围内哦';
61 }
62 }
63 }
64
65 }
66 ?>
67</body>
68</html>
69
这里我们用explode()
切割字符串为数组。
扩展阅读:http://www.php.net/manual/zh/function.explode.php
为了避免用户多输入空格,我们使用str_replace(' ', '', $value)
把空格替换成空值,也就起到了字符串消除空格的效果
扩展阅读:http://www.php.net/manual/zh/function.str-replace.php
评论 (1)
这个算是比较整洁了,不过还可以再整洁。