王志勇 发表于 2018年10月10日 09:01
计数器在以前很多年里不使用,不统计网站的访问量,是因为计数器会消耗一点服务器资源,因为每访问一次就要对硬盘进行一次数据写入。
大概在2010年,webshu的网站从原来的HTML全静态+ASP动态页,重构为PHP全动态。我当时新写了一个计数器的程序,但是发现总访问量达到3万、或5万的时候,又会自动清零,重新统计,这样的情况在这几年里出现了6-8次以上。这是怎么回事呢?由于数据写入失败造成的。
特别是像计数器这种由用户访问、自动写入数据的情况,需要采取防止数据写入失败的措施。这个方案是,假设将要写入的新数据是$a1,原有的写入数据程序,更改为执行5次循环,其中第1次循环只执行写入,从第2次循环开始读取新写入的数据$a1,其中变量$a2是第2次循环开始读取的数据,让$a1和$a2进行比对,如果$a1和$a2的值相同,则说明写入成功,此时用break;语句来终止循环,这样实际相当于只循环了1次,也就是循环到1时先写入,循环到2时进行比对、并终止循环。
如果$a1和$a2的值不相同,就是如上述的计数器到3万、或5万的时候,出现的数据写入失败,这时会继续往后循环到3,继续写入、再继续自动比对,一旦写入成功,则自动终止循环。
自动终止循环在此处有2个重要意义,1是一旦写入成功,则不再写入,后面再重复执行写入就没有意义(甚至可能重复的写入会写入错误的数据),2是减少硬盘的写入。
通用程序思路如下:
<?
// ……前面程序个例省略,$a1为将要写入的数据值
$a2='';
for ($i=1;$i<=5;$i++){if ($i>1) …… //读取$a2的语句
if ($a2==$a1) break;
if ($a2!=$a1){ …… //写入$a1的语句
}}
?>
其中if ($i>1)这个条件,巧妙地让第1次循环不读取$a2,因为第1次循环时$a1还没有写入。
这个方案昨天调试了2个多小时,圆满完成。
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +