上篇日志是关于,如何在客户端实现用cookie保存个人用户访问网站的次数的。这篇日志是讲,在服务器端统计访问网站的总人数。
实现方法有两种:1、当用户访问网站时,记录用户的ip,存入到数据库中,然后用一条select语句计算出所有ip的记录数,这样就能算出网站的总访问人数了。但这样做的缺点是:如果访问网站的人数较多的话,那数据库中的ip地址记录也就很多了,用select语句的话,运行效率低。
2、把网站总访问人数存储在一个文件里,用户访问网站时,则从文件里取出数据,加1,然后再重新写入文件。
现在我就用第二种方法来实现服务器端统计访问网站总人数。
Code:
/*
php实现后台统计网站总访问人数,并存储在txt文件中
1.判断存储访问人数的文件是否存在,若不存在,则创建文件
2.若存储网站总访问人数的文件已存在,则再判断客户端是否是刷新操作
3.若客户端不是刷新操作,则从文件中读取数据,将数据大小加1,并重新写入文件中
*/
header( 'Content-Type:text/html;charset=utf-8 ');
$count_file="count_num.txt";
if(file_exists($count_file)){ //判断存储访问人数的txt文件是否存在,若存在,则执行下面操作
if(isset($_COOKIE['visit_jorbe_time'])){ //判断cookie:'visit_jorbe_time'是否存在,若存在,则执行下面操作
setcookie("visit_jorbe_time",time()); //设置cookie,当关闭浏览器时失效
$fp0=@fopen($count_file, "r"); //设置打开文件模式为只读取数据,不能写入数据
$count_num=fgets($fp0,6); //从文件中读取前5位数字
echo "共有"."$count_num"."位访客访问本站。";
fclose($fp0); //关闭文件
}else{
setcookie("visit_jorbe_time",time());
$fp=@fopen($count_file, "r");
$count_num=fgets($fp,6);
$count_num+=1; //访问人数加1
$fp1=@fopen($count_file, "w"); //设置打开文件模式为可写入数据
fwrite($fp1, $count_num); //将访问人数写入文件
echo "共有"."$count_num"."位访客访问本站。";
fclose($fp1);
}
exit();
}else{
$fp3=fopen("count_num.txt", "w"); //fopen函数的第二个参数为“w"时,如果文件不存在,将自动生成文件
$count_num1=1;
fwrite($fp3, $count_num1);
echo "只有一人访问过本站";
fclose($fp3);
exit();
}
?>
注意事项:不要在setcookie函数之前有任何html输出,所以不要在代码开头用
echo "";
来设置编码格式。还有就是在打开文件时,读取数据和写入数据要分别fopen(string $filename,string mode)下,奇怪的是,我看官方文档里说只要把mode设置成"r+"就既能读取也能写入文件了,可事实却不是这样的。当我把fopen的mode设置成"r+"时,写入数据的时候就出错了。不知道是什么原因???
Tagged on: php
发表评论
电子邮件地址不会被公开。 必填项已用*标注
姓名 *
电子邮件 *
站点
评论