PHP图形数字计数器的实现
php图形数字计数器,是现在网站中经常使用的方法,它的基本功能是针对单个用户而言,登录网站后计数器的值加一,用户刷新网页,计数器的值不会增加。这一点功能的实现是利用session来实现的,当用户登录时,检测session变量的值,如果该值为空,则在存放登录人数的文件中读取现有的访问量,将该值加一,关闭文件,然后输出改值;如果session变量的值不为空,则计数器的值不增加,即使在用户刷新的时候也不增加。
session实现计数有一点不足的地方,就是虽然用户在该页面刷新时计数器的值不会增加,但是当用户关闭浏览器,再次打开这个网页时,计数器的值仍会增加,不过这样也是符合计数的原理的;在这一点和cookie不同的是,利用cookie实现用户刷新计数器的值不更新,关闭浏览器打开也是不更新,但是这是在一定的期限内的,当用户设置的cookie过期之后,计数器的值还是会增加;这样分析来看,如果要非常精确的计数,有多少人访问网站就要用IP来实现,而且要存储在数据库中,这个相对前两种来说麻烦一点,但是利用数据库保存IP可以实现更精确的统计,不单单实现用户刷新不重复计数,还能实现统计总的访问量,某个月的访问量,某天的访问量,甚至精确到某个IP的访问量等,在这里就先介绍利用session实现的图形数字计数器:
在根目录下创建:data.txt的文件,用来保存访问量。
$handle=fopen("data.txt","r");
if(!$handle){
echo "打开文件失败!";
}else{
echo "您是本站的第:";
$counter = fgets($handle,1024); // 取出文件中的现有的访问量的值
fclose($handle);
$count = strlen($counter); // 这里实现的是6为数字的计数,例如002056,在这里计算出counter的长度,那么它前面的就是全部输出0就可以了
for($i=0;$i<6-$count;$i++){
echo "<img src='images/0.png'> "; // 2056前面都输出 0 的那个小png的图片
}
}
for($i=0;$i<$count;$i++){
$disgn = substr($counter,$i,1); // 这里利用substr()函数实现一位一位的数字来比较,第一个参数是string类型的变量,第二个参数是从第几个开始输出,第三个变量是 输出几个
switch($disgn) { // 各自比较 转化为图片的形式
case '0':
$rst[$i]='0.png';
break;
case '1';
$rst[$i]='1.png';
break;
case '2':
$rst[$i]='2.png';
break;
case '3':
$rst[$i]='3.png';
break;
case '4':
$rst[$i]='4.png';
break;
case '5':
$rst[$i]='5.png';
break;
case '6':
$rst[$i]='6.png';
break;
case '7':
$rst[$i]='7.png';
break;
case '8':
$rst[$i]='8.png';
break;
case '9':
$rst[$i]='9.png';
break;
}
echo "<img src='images/".$rst[$i]."'> ";
}
echo "位访客";
这里要准备0—9的图片素材,保存在根目录下的images文件夹中就可以了,具体的实现效果是: