你的代码本身有问题,最主要的原因是没有考虑多线程并发情况。就算是单线程条件下,这段程序也有问题,exec( "rm -rf $counterFile"); 这句话是不可能执行的,因为前面fopen着不可能删掉的。但是fopen失败,$fp也没有检查,居然这句话还能执行到。为什么有fopen,fgets的文件操作,还要调用exec系统命令,直接fputs不就行了吗?而且文件函数提供flock避免同时访问造成错误。
调试欢乐多
$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,可是计数器还是掉,请各位帮忙看一下,不胜感激!!!谢谢!!!