MYSQL基础笔记(五)- 练习作业:站点统计练习

作业:站点统计

  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

  要写入的数据。类型可以是 stringarray 或者是 stream 资源(如上面所说的那样)。

  如果 data 指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。

  参数 data 可以是数组(但不能为多维数组),这就相当于file_put_contents($filename, join(‘‘, $array))

  flags

  flags 的值可以是 以下 flag 使用 OR (|) 运算符进行的组合。

context

  一个 context 资源。

时间: 2024-10-18 21:29:35

MYSQL基础笔记(五)- 练习作业:站点统计练习的相关文章

MYSQL基础笔记(三)-表操作基础

数据表的操作 表与字段是密不可分的. 新增数据表 1 Create table [if not exists] 表名( 2 字段名 数据类型, 3 字段名 数据类型, 4 字段n 数据类型 --最后一行不需要加逗号 5 )[表选项]; If not exists:如果表名不存在,那么就创建,否则不执行创建代码,实现检查功能. 表选项:控制表的表现 1.字符集:charset/character 具体字符集:--保证表中数据存储的字符集. 2.校对集:collate 具体校对集: 3.存储引擎:e

MYSQL基础笔记(四)-数据基本操作

数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. 1 insert into 表名 values(值列表)[,(值列表)]: -- 可以一次性插入多条记录. 2.方案二,给部分字段插入数据,需要选定字段列表,字段列表出现的顺序与字段的顺序无关,但是值列表的顺序必须与选定字段的顺序一致. 1 insert into 表名 (字段列表) values (

MYSQL基础笔记(二)-SQL基本操作

SQL基本操作 基本操作:CRUD,增删改查 讲SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: 1 Create database 数据库名字[库选项]: 库选项:用来约束数据库,分为两个选项:1.字符集设定:charset/character set 具体字符集(数据存储的编码格式,中文常用字符集gbk和utf8.).2.校对集设定:collate 具体校对集(数据比较的规则). 例如: 其中:数据库名字不能

MySQL基础(五)——视图

MySQL基础(五)--视图

MySQL基础笔记

一.登录参数 -D 打开指定数据库 -h 服务器名称 -p 密码 -P 端口 -u 用户名 -V 输出版本信息并退出 --prompt 提示符 mysql> ,或者登陆后 用prompt命令 提示符:\D 完整的日期\d 当前数据库\h 服务器名称\u 当前用户 二.常用命令 1.显示当前服务器版本 select version(); 2.显示当前时间 select now(); 3.显示当前用户 select user(); 4.显示当前用户打开的数据库 select database();

MYSQL基础笔记(七)- 数据类型二

字符串类型 在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set char,定长字符串 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度. char(L):L代表length,可以存储长度,单位为字符.最大长度值为255. varchar变长字符串 在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少空间,是根据具体的数据来确定的. varchar(L):L表示字符长度,理论长度是65536个字符,但是会多出1到2个字节来确定存

Oracle基础笔记五

第五章 分组函数 1.什么是分组函数? 分组函数作用于一组数据,并对一组数据返回一个值. 类型:AVG COUNT MAX MIN STDDEV SUM 2.AVG(平均值)和 SUM (合计)函数: 可以对数值型数据使用AVG 和 SUM 函数. SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM   employees WHERE  job_id LIKE '%REP%'; 3.MIN(最小值)和 MAX(最大值)函数

大数据Java基础第五天作业

第一题:     加载类的时候执行静态代码块,静态代码块的作用为了初始化值. 第二题:     构造代码块先于构造函数的调用,和方法声明的位置无关.顺序是:加载类 => 执行静态代码块      => 实例化类 => 执行构造代码块 => 执行构造函数.     构造代码块的作用也是为了初始化对象属性成员的值. 第三题:     会执行静态代码块,Class.forName("Benz",flase,BenzDemo.class.getClassLoader()

JavaSE基础笔记五

第四章 面向对象(二) 1.面向对象的特征二:继承性 1.为什么要有继承性:减少代码的冗余 2.通过"class A extends B"类实现类的继承 子类(派生类):A   父类:(或基类 SuperClass) :B 3.子类继承父类后,父类中声明的属性.方法,子类就可以获取到 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使子类不可以直接调用罢了 子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分 extends:子类是对父类功能