php计数器总是从18890掉到1开始计数?

liuminbt 2008-05-27 03:26:45
我在index.htm也就是主页需要显示计数器的地方加入如下代码:
<IFRAME name=mainjishu marginWidth=0 marginHeight=0 src="count.php" frameBorder=0 width=220 scrolling=no height=15> </IFRAME>
count.php代码如下:
<?php
$counterFile = "count.txt";
function displayCounter($counterFile) {
$fp = fopen($counterFile,"rw");
$num = fgets($fp,20);
$num += 1;
print " 您是本年度第"."$num"."位访问者!";
exec( "rm -rf $counterFile");
exec( "echo $num > $counterFile");
fclose($fp);
}
if (!file_exists($counterFile)) {
exec( "echo 18890 > $counterFile");
}
displayCounter($counterFile);
?>
count.txt中的初始值为18890,因为是图书馆主页,点击率高,刚开始计数器从18890开始计数,显示正常,等几个小时后计数器就掉了下来显示为100人。
不知道是什么原因?我琢磨了几天了也没解决,请论坛的高手帮忙!谢谢!!!
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
arlen43 2010-10-04
  • 打赏
  • 举报
回复
可是同ip几次打开该页面不久一直加了吗,怎么通过ip统计啊??
chenling0828 2008-06-10
  • 打赏
  • 举报
回复
<?php

$fp=fopen("count.txt","r");

$num=fgets($fp,10);

$num+=1;

fclose($fp);

$fp=fopen("count.txt","w");

fputs($fp,$num);

fclose($fp);

print "网站总访问量:".$num;

?>
liuminbt 2008-05-29
  • 打赏
  • 举报
回复
<?php
$counterFile = "count.txt";
function displayCounter($counterFile) {
$fp = fopen($counterFile,"rw");
$FileSize=filesize($counterFile);
$num=fgets($fp,$FileSize+1);
$num += 1;
flock($fp, LOCK_EX);
exec( "echo $num > $counterFile");
flock($fp, LOCK_UN);
fclose($fp);
print " 您是本年度第"."$num"."位访问者!";
}
if (!file_exists($counterFile)) {
exec( "echo 1428865 > $counterFile");
}
displayCounter($counterFile);

?>
用fputs不能将$num写入count.txt只能调用exec,可是计数器还是掉,请各位帮忙看一下,不胜感激!!!谢谢!!!
liuminbt 2008-05-27
  • 打赏
  • 举报
回复
我修改代码再试试,非常感谢!!!
Meteorlet 2008-05-27
  • 打赏
  • 举报
回复
你的代码本身有问题,最主要的原因是没有考虑多线程并发情况。就算是单线程条件下,这段程序也有问题,exec( "rm -rf $counterFile"); 这句话是不可能执行的,因为前面fopen着不可能删掉的。但是fopen失败,$fp也没有检查,居然这句话还能执行到。为什么有fopen,fgets的文件操作,还要调用exec系统命令,直接fputs不就行了吗?而且文件函数提供flock避免同时访问造成错误。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧