作业:站点统计
1、将用户的访问信息记录到文件中,独占一行,记录IP地址
1 <?php 2 //站点统计
3 header('Content-type:text/html;charset=utf-8'); 4
5 //获取用户信息
6 $ip = $_SERVER['REMOTE_ADDR']; 7
8 //写入文件(追加)
9 file_put_contents('record.text',$ip."\r\n",FILE_APPEND);
2、所有信息都是通过文件中记录的内容来计算的,读取整个文件,一行代表访问一次,使用file函数读取。
1 //读取数据 ,以行为单位
2 $info = file('record.text');
3、总的访问次数等于总行数,就是读取的数组的总记录数。
1 //求出网站的总访问量
2 $visits = count($info);
4、求出当前用的访问次数,当前用户的IP在数组中出现的次数
1 //求出当前用户(IP)出现的次数
2 $ip_visits = 0; 3 foreach($info as $each_ip) 4 { //比较
5 if($each_ip == $ip) 6 $ip_visits++; 7 }
5、总共有多少个用户访问过,遍历当前所有的访问用户信息,另外使用一个数组保存。如果当前IP在数组中存在,那么不加入,否则加入。最后统计新数组即可。
1 foreach($info as $each_ip) 2 { 3 //统计当前数组中拥有的的独立IP数
4 if(!in_array($each_ip,$unique_ips)) 5 $unique_ips[] = $each_ip; 6
7 //比较:从文件中读出的是一行,用trim去掉换行符空格
8 if(trim($each_ip) == $ip) 9 $ip_visits++; 10
11 //统计$unique_ips中的元素个数:就是独立ip数,总用户
12 $users = count($unique_ips); 13 }
6、求出当前用户是第几位访问访问者,只要判断当前IP在独立用户数组中出现的位置即可。
下面是整个作业的代码:
1 <?php 2 //站点统计
3 header('Content-type:text/html;charset=utf-8'); 4 //获取用户信息
5 $ip = $_SERVER['REMOTE_ADDR']; 6 //写入文件(追加)
7 file_put_contents('record.text',$ip."\r\n",FILE_APPEND); 8 //读取数据 ,以行为单位
9 $info = file('record.text'); 10 //求出网站的总访问量
11 $visits = count($info); 12 //求出当前用户(IP)出现的次数
13 $ip_visits = 0; 14 $unique_ips = array(); 15 foreach($info as $each_ip) 16 { 17 //统计当前数组中拥有的的独立IP数
18 if(!in_array($each_ip,$unique_ips)) 19 { //讲当前新的用户加入到独立的ip数组中
20 $unique_ips[] = $each_ip; 21 //判断当前新加的IP($each_ip)是否是当前用户的IP
22 if($ip == trim($each_ip)) $user_visit = count($unique_ips); 23
24 } 25
26 //比较:从文件中读出的是一行,用trim去掉换行符空格
27 if(trim($each_ip) == $ip) 28 $ip_visits++; 29
30 //统计$unique_ips中的元素个数:就是独立ip数,总用户
31 $users = count($unique_ips); 32 } 33 //需求_输出
34 echo "欢迎访问,你是第{$user_visit}个用户,当前网站一共有{$users}位用户, 35 当前网页一共被访问了{$visits}次,你当前是第{$ip_visits}位访问"; 36 ?>
本作业所涉及的几个PHP函数总结:
1、$_SERVER['REMOTE_ADDR']
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。
'REMOTE_ADDR' 浏览当前页面的用户的 IP 地址。
2、 file_put_contents— 将一个字符串写入文件
1 int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
参数
-
filename
-
要被写入数据的文件名。
-
data
-
要写入的数据。类型可以是 string,array 或者是 stream 资源(如上面所说的那样)。
如果
data
指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。参数
data
可以是数组(但不能为多维数组),这就相当于file_put_contents($filename, join('', $array))。 -
flags
-
flags
的值可以是 以下 flag 使用 OR (|) 运算符进行的组合。context
一个 context 资源。