作业:站点统计

  1、将用户的访问信息记录到文件中,独占一行,记录IP地址

 <?php
//站点统计
header('Content-type:text/html;charset=utf-8'); //获取用户信息
$ip = $_SERVER['REMOTE_ADDR']; //写入文件(追加)
file_put_contents('record.text',$ip."\r\n",FILE_APPEND);

  2、所有信息都是通过文件中记录的内容来计算的,读取整个文件,一行代表访问一次,使用file函数读取。

 //读取数据 ,以行为单位
$info = file('record.text');

  3、总的访问次数等于总行数,就是读取的数组的总记录数。

 //求出网站的总访问量
$visits = count($info);

  4、求出当前用的访问次数,当前用户的IP在数组中出现的次数

 //求出当前用户(IP)出现的次数
$ip_visits = 0;
foreach($info as $each_ip)
{ //比较
if($each_ip == $ip)
$ip_visits++;
}

  5、总共有多少个用户访问过,遍历当前所有的访问用户信息,另外使用一个数组保存。如果当前IP在数组中存在,那么不加入,否则加入。最后统计新数组即可。

 foreach($info as $each_ip)
{
//统计当前数组中拥有的的独立IP数
if(!in_array($each_ip,$unique_ips))
$unique_ips[] = $each_ip; //比较:从文件中读出的是一行,用trim去掉换行符空格
if(trim($each_ip) == $ip)
$ip_visits++; //统计$unique_ips中的元素个数:就是独立ip数,总用户
$users = count($unique_ips);
}

  6、求出当前用户是第几位访问访问者,只要判断当前IP在独立用户数组中出现的位置即可。

  下面是整个作业的代码:

 <?php
//站点统计
header('Content-type:text/html;charset=utf-8');
//获取用户信息
$ip = $_SERVER['REMOTE_ADDR'];
//写入文件(追加)
file_put_contents('record.text',$ip."\r\n",FILE_APPEND);
//读取数据 ,以行为单位
$info = file('record.text');
//求出网站的总访问量
$visits = count($info);
//求出当前用户(IP)出现的次数
$ip_visits = 0;
$unique_ips = array();
foreach($info as $each_ip)
{
//统计当前数组中拥有的的独立IP数
if(!in_array($each_ip,$unique_ips))
{ //讲当前新的用户加入到独立的ip数组中
$unique_ips[] = $each_ip;
//判断当前新加的IP($each_ip)是否是当前用户的IP
if($ip == trim($each_ip)) $user_visit = count($unique_ips); } //比较:从文件中读出的是一行,用trim去掉换行符空格
if(trim($each_ip) == $ip)
$ip_visits++; //统计$unique_ips中的元素个数:就是独立ip数,总用户
$users = count($unique_ips);
}
//需求_输出
echo "欢迎访问,你是第{$user_visit}个用户,当前网站一共有{$users}位用户,
当前网页一共被访问了{$visits}次,你当前是第{$ip_visits}位访问";
?>

 本作业所涉及的几个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 资源。

 上一节:MYSQL基础笔记(四)-数据基本操作

下一节:MYSQL基础笔记(六)- 数据类型一

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

  1. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

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

    数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...

  3. MySQL基础(五)——视图

    MySQL基础(五)--视图

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

    数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...

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

    SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...

  6. MYSQL基础笔记(一)

    关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...

  7. C#基础第五天-作业答案-用DataTable制作名片集

    .DataTable 实现 DataTable PersonCard = new DataTable(); //创建一个DataTable DataTable PersonCardCopy = new ...

  8. C#基础第五天-作业-用DataTable制作名片集

    1.用DataTable集合去实现名片集.(增加,修改,删除,查询,查询全部)需求:根据人名去(删除/查询).指定列:姓名,年龄,性别,爱好,电话. 本系列教程: C#基础总结之八面向对象知识点总结- ...

  9. C语言基础第五次作业

    题目7-2 统计一行文本的单词个数 1.实验代码 #include <stdio.h> int main() { char a; ,countword=; ){ scanf("% ...

随机推荐

  1. 5个让人激动的Java项目

    每个Java/JVM领域的技术专家都应从那些项目中获益,他们中有2011在SanJose举办的Jax 会议中提名为最好的技术产品奖的.我之所以选择它们,是因为它们可以广泛用于一系列的项目中,解决真实问 ...

  2. 微软企业库5.0学习-Security.Cryptography模块

    一.微软企业库加密应用模块提供了两种加密: 1.Hash providers :离散加密,即数据加密后无法解密 2.Symmetric Cryptography Providers:密钥(对称)加密法 ...

  3. 什么是APNs证书?

    转载自 http://dev.xiaomi.com/doc/p=2977/index.html 什么是APNs和APNs证书? APNs(全称为Apple Push Notification Serv ...

  4. C#Windows窗体界面设计_01_绘制三角函数_附强制类型转换

    binzhouweichao@163.com 今天开始学习C#windows窗体界面设计. 首先说一下类型转换. 参考http://www.csharpwin.com/csharpspace/6848 ...

  5. How to Be Good at Mathematics

    How to Be Good at Mathematics Community Q&A Sometimes, the hardest subject for some people is ma ...

  6. [刷题codeforces]650A.637A

    650A Watchmen 637A Voting for Photos 点击查看原题 650A又是一个排序去重的问题,一定要注意数据范围用long long ,而且在写计算组合函数的时候注意也要用l ...

  7. OOP设计模式[JAVA]——03职责链模式

    职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...

  8. 批量下载QQ空间日志

    从手机页面读取,有时候也会卡死,解决办法还是重新来……………… # -*-coding:utf-8-*- # 作者:fwindpeak # import urllib import urllib2 i ...

  9. Java模拟网站登录02【转载】

    如何用Java代码模拟一些如百度.QQ之类的网站登录?有两个方式,一是发送模拟请求,二是模拟浏览器操作,而这两种方式恰好在Java有开源实现,在这里介绍一个工具包,它是家喻户晓的HttpClient. ...

  10. QM课程02-外部功能

    质量计划 · 对质量计划和检验计划进行基本数据的管理 · 物料说明 · 检验计划 质量检验 · 触发检验 · 具有检验计划选择和样本计算的检验处理 · 打印采样和检验的车间文档 · 记录结果和缺陷 · ...