Mar 24

[原创]一个浏览次数统计的函数 不指定

bkkkd , 19:46 , 开发应用 , 评论(4) , 引用(0) , 阅读(5937) , Via 本站原创 | |
昨天在一个站上看到有人说怎样才能很好的统计一个网站的浏览次数,其实这一个问题是很多基础教程都会出现的一个例子
一般都是直接用一个文件来当数据文件来写,其实这样也是没有问题的。正常情况下可以用来统计浏览数,但是如果对一个访问量大的站来说,可能是不对的.因为同一时间内,可能有几十个几百个人在浏览网站,那如果都对同一个文件进行读写,有可能会出现写入错误(ext2/3文件系统通过flock进行文件锁来控制写入错误);或者有十个人同时浏览网站,而由于只有一个人能写入文件,其它九个人都被忽略了,那样就会小了九个浏览数。
而我这个函数就是用来解决上面的两个问题,采用了文件读写锁,然后每次随机写某个分散文件内,分某个分散文件达到一定位数的时候就把它写入到总浏览,大大减小了同时对同一文件进行读写。

/**
* 功能描述:对一个网站所以页面被浏览次数的统计
* @Date:2007-3-24
* @Copyright © bkkkd
* @Site:http://atim.cn
**/
Function recordviewnum()
{
      $randnum=10;//最多的分散文件数
    $Updatesite=2;//当分散文件保存的浏览数达到几位时写入到总浏览数
    $rand=rand(1,$randnum);
      $D_path="./viewtotal/$rand.php";
      $T_path="./viewtotal/set.php";
      touch($D_path);
      touch($T_path);
      $D_size=filesize($D_path);
      $T_size=filesize($T_path);
      If($D_size>=$Updatesite)
      {
          $D_fp=fopen($D_path,"rb+");
          if($D_fp)
          {
                flock($D_fp,LOCK_EX);
                $D_viewnum=intval(fread($D_fp,$D_size));
                $D_viewnum+=1;
                fseek($D_fp,0);
                fwrite($D_fp,0);
                ftruncate($D_fp,1);
                fclose($D_fp);
                $T_fp=fopen($T_path,"rb+");
                if($T_fp)
                {
                      flock($T_fp,LOCK_EX);
                      $T_viewnum=intval(fread($T_fp,$T_size));
                      $T_viewnum=$T_viewnum+$D_viewnum;
                      fseek($T_fp,0);
                      fwrite($T_fp,$T_viewnum);
                      fclose($T_fp);
                 }
           }
       }
       Else
       {
           $D_fp=fopen($D_path,"rb+");
           if($D_fp)
           {
                  flock($D_fp,LOCK_EX);
                  $D_viewnum=intval(fread($D_fp,$D_size));
                  $D_viewnum+=1;
                  fseek($D_fp,0);
                  fwrite($D_fp,$D_viewnum);
                  ftruncate($D_fp,strlen($D_viewnum));
                  fclose($D_fp);
                  $T_fp=fopen($T_path,"rb");
                  if($T_fp)
                  {
                        flock($T_fp,LOCK_SH);
                        $T_viewnum=intval(fread($T_fp,$T_size));
                        fclose($T_fp);
                   }
             }
        }
        Return $T_viewnum;
}
Tags: , ,
bkkkd Email Homepage
March 26, 2007 00:13
这是一条隐藏评论或留言。您需要以合适的身份登入后才能看到。
lee Homepage
March 25, 2007 20:55
这是一条隐藏评论或留言。您需要以合适的身份登入后才能看到。
Ella
March 24, 2007 23:41
这是一条隐藏评论或留言。您需要以合适的身份登入后才能看到。
bkkkd 回复于 March 25, 2007 01:42
都还给语文老师了
lee Homepage
March 24, 2007 23:18
这是一条隐藏评论或留言。您需要以合适的身份登入后才能看到。
bkkkd 回复于 March 25, 2007 01:41
session_end?什么来的?
没听过
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]