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

解决方案 »

  1.   

    <?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,可是计数器还是掉,请各位帮忙看一下,不胜感激!!!谢谢!!!
      

  2.   

    <?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;?>
      

  3.   

    可是同ip几次打开该页面不久一直加了吗,怎么通过ip统计啊??