包含 统计 标签的文章

PHP 在线人数统计程序

突然想给网站搞个在线人数统计(当然,不是我自己的网站,自己的网站在线人数手指头一伸就数出来了),于是想到很早前收集的一个在线人数统计小程序,但是那个在线统计是以IP来算的,如果我们公司那么一大堆人访问不是只算一个么,于是自己写了一个在线人数统计程序,有多少电脑正打开你的网站就有多少人访问,It's Okay!

看代码:

 

PHP代码
  1. <?php   
  2. /*  
  3.     @ PHP 在线人数统计程序  
  4.     Copyright (c) www.vgot.cn by Pader 1:25 2009年1月7日  
  5.     Homepage:http://www.vgot.cn  
  6.     QQ: 270075658  
  7.     How to use it: <script src="online.php"></script>  
  8.     note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确  
  9.     例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样  
  10.     如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人  
  11.     这个小巧的程序解决了此问题,它以电脑为单为,每台电脑便算一个访问者  
  12.     当然因为使用的是COOKIE,如果你在同一台电脑上使用两种不同核心的浏览器访问那就别当别论了  
  13. */  
  14. $filename = 'online.txt';  //数据文件   
  15. $cookiename = 'VGOTCN_OnLineCount';  //cookie名称   
  16. $onlinetime = 600;  //在线有效时间,单位:秒 (即600等于10分钟)   
  17.   
  18. $online = file($filename);    
  19. $nowtime = time();    
  20. $nowonline = array();   
  21.   
  22. /*  
  23.     @ 得到仍然有效的数据  
  24. */  
  25. foreach($online as $line) {   
  26.     $row = explode('|',$line);   
  27.     $sesstime = trim($row[1]);   
  28.     if(($nowtime - $sesstime) <= $onlinetime) {  //如果仍在有效时间内,则数据继续保存,否则被放弃不再统计   
  29.         $nowonline[$row[0]] = $sesstime;  //获取在线列表到数组,会话ID为键名,最后通信时间为键值   
  30.     }   
  31. }   
  32.   
  33. /*  
  34.     @ 创建访问者通信状态  
  35.         使用cookie通信  
  36.         COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时  
  37. */  
  38. if(isset($_COOKIE[$cookiename])) {  //如果有COOKIE即并非初次访问则不添加人数并更新通信时间   
  39.     $uid = $_COOKIE[$cookiename];   
  40. else {  //如果没有COOKIE即是初次访问   
  41.     $vid = 0;  //初始化访问者ID   
  42.     do {  //给用户一个新ID   
  43.         $vid++;   
  44.         $uid = 'U'.$vid;   
  45.     } while (array_key_exists($uid,$nowonline));   
  46.     setcookie($cookiename,$uid);   
  47. }   
  48. $nowonline[$uid] = $nowtime;  //更新现在的时间状态   
  49.   
  50. /*  
  51.     @ 统计现在在线人数  
  52. */  
  53. $total_online = count($nowonline);   
  54.   
  55. /*  
  56.     @ 写入数据  
  57. */  
  58. if($fp = @fopen($filename,'w')) {   
  59.     if(flock($fp,LOCK_EX)) {   
  60.         rewind($fp);   
  61.         foreach($nowonline as $fuid => $ftime) {   
  62.             $fline = $fuid.'|'.$ftime."\n";   
  63.             @fputs($fp,$fline);    
  64.         }   
  65.         flock($fp,LOCK_UN);   
  66.         fclose($fp);   
  67.     }   
  68. }   
  69.     echo 'document.write("'.$total_online.'");';    
  70. ?>  

代码里可能插入的时候带了一些空格程序不能正常运行,可以点附件下载。

给留言本做了个小后台

一直没有后台,最近花了点时间为我的“用心聆听留言本”做了一个小后台,简单的很,呵呵。
仍然保持文本存储,优化了一些操作的方法,现在整个留言本源码有 19 个文件,总大小 41.9KB,当然,写的那个模仿 Session 的 Impression 生成的临时数据就不算了,可以随时删除,如果把改成 PHP 自带的 Session 进行传递,总程序肯定会更小了,过两天再一时兴起把清理留言和搜索的功能加上去就算完了。

[attach=42]

[attach=43]

错误提示也是用的一样的方法:
[attach=44]

 28号那天奥运圣火来合肥,本来我们学校和一个集团(哪个集团呢,大家应该能猜到)说好了大家在那天去参加他们的助威团,27号中午还召集我们开了会,正当我们热血沸腾的时候下午又把我们叫去说不去了,学校里五百个学生的热血就这样被浇灭了,哎,原因是中央组委会下发文件说国丧期间,一切从简,呵呵,我们还是能理解的,叭一的想法就是遗憾。。。
最近发生了很多事,都想记下来,可是现在正发烧,头晕,什么都想不起来,就像以前一样,本来有很多东西想写,可是一登陆自己的网站便什么都想不起来了,晕~

另外把网站下方的小统计程序改了个文本版的,突然觉得这小东西用 MySQL 数据库是不是太浪费了,又改成了个单用户的文本版。
自己研究吧。

PHP代码
  1. <?php   
  2. /*  
  3. 网站访问统计程序TXT版  
  4. 统计全部点点击,全部人次,今日点击,今日人次。  
  5. 数据判断根据存入数据库、现在时间和存入用户机器的COOKIE判断  
  6. 每台计算机每天只可以增加全部人次和今日人次一次,全部点击和今日点击每打开网页一次便增加一次  
  7. 设计 BY pader  
  8. E-mail: ypnow@163.com  
  9. */  
  10. $datafile = "count.txt";  //数据文件   
  11. $cookiename = "vgotcnstatis"//COOKIE的名称   
  12.   
  13. function writedata($indata){ //写数据函数   
  14.  global $datafile;   
  15.  $iswrite = false;   
  16.  if($fp = fopen($datafile,"w")){   
  17.   if(flock($fp,LOCK_EX)){   
  18.    if(fwrite($fp,$indata)){$iswrite = true;}   
  19.    flock($fp,LOCK_UN);   
  20.   }    
  21.   fclose($fp);   
  22.  }    
  23.  return $iswrite;   
  24. }   
  25.   
  26. header("programa:no-cache");  //没有缓存   
  27. $today = date("Ymd"); //今天   
  28.   
  29. //判断数据文件是否存在   
  30. if(file_exists($datafile)){   
  31.  $datagot = file_get_contents($datafile);   
  32.  $row = explode("|",$datagot);   
  33.  list($day,$all_click,$all_once,$today_click,$today_once,$about) = $row;   
  34.  $all_click++;   
  35.  if($day == $today){   
  36.   $today_click++;   
  37.   if((!$_COOKIE[$cookiename]) or ($_COOKIE[$cookiename] < $today)){   
  38.    $all_once++;   
  39.    $today_once++;   
  40.   }   
  41.   setcookie($cookiename$today, time()+3600*24);   
  42.  }else{   
  43.   $today_click = "1";   
  44.  $all_once++;   
  45.  $today_once = "1";   
  46.  setcookie($cookiename$today, time()+3600*24);   
  47.  }   
  48.  $datastring = $today."|".$all_click."|".$all_once."|".$today_click."|".$today_once;   
  49.  writedata($datastring);   
  50. echo <<<EOF   
  51. <!--   
  52. document.write("全部点击:$all_click,全部人次:$all_once,今日点击:$today_click,今日人次:$today_once");   
  53. //-->   
  54. EOF;   
  55.   
  56. }else//否则即如果数据文件不存在   
  57.  echo "数据文件不存在,正在创建数据文件...<br>";   
  58.  if(@touch($datafile)){   
  59.   echo "<font color=red>创建数据文件成功,准备写入初始数据...</font><br>";   
  60.   $datastring = $today."|1|1|1|1";   
  61.   if(writedata($datastring)){   
  62.    echo "<font color=red>写入初始数据成功,现在可以正常使用统计功能了.请刷新页面</font><br>";   
  63.   }else{   
  64.    die("<font color=black>写入初始数据失败!</font><br>");   
  65.   }   
  66.  }else{   
  67.    die("<font color=black>创建数据文件失败!</font><br>");   
  68.  }   
  69. }   
  70. ?>  

我的第一个使用MYSQL的程序

放了40天署假,没电脑用,在家里死看那一个PHP的书,居然基本学会了怎么用MYSQL,刚来到学校便测试一下,虽然有些小问题,不过已经修改好,以前一直觉得MYSQL有多深奥,如今看来,也不是那么难,有道是会者不难,不知道我的程序生涯将如何开始(汗,我是一个学电脑美术的),下面看看我的第一个用到MYSQL的程序吧,是个简单的统计程序。

 

PHP代码
  1. <?php       
  2. /*     
  3. 网站访问统计程序MYSQL版     
  4. 统计全部点点击,全部人次,今日点击,今日人次。     
  5. 数据判断根据存入数据库、现在时间和存入用户机器的COOKIE判断     
  6. 每台计算机每天只可以增加全部人次和今日人次一次,全部点击和今日点击每打开网页一次便增加一次     
  7.     
  8. 在安装时执行以下SQL语句:     
  9. CREATE TABLE statis (     
  10. id INT NOT NULL AUTO_INCREMENT,     
  11. n_day INT(8) NOT NULL,     
  12. all_click INT NOT NULL,     
  13. all_once INT NOT NULL,     
  14. today_click INT NOT NULL,     
  15. today_once INT NOT NULL,     
  16. about TEXT NULL,     
  17. PRIMARY KEY (id)     
  18. );     
  19.     
  20. 添加用户使用以下SQL语句:     
  21. insert into statis values(NULL,0,0,0,0,0,'站点的相关信息');     
  22.     
  23. 设计 BY pader   
  24. E-mail: ypnow@163.com     
  25. 本人的第一个原创使用MYSQL的程序     
  26. */      
  27. $_mysql["host"] = "localhost";  //数据库地址       
  28. $_mysql["user"] = "root";       //数据库用户名       
  29. $_mysql["pwd"] = "0000";        //数据库密码       
  30. $_mysql["database"] = "test";   //所用数据库名       
  31. $_mysql["table"] = "statis";    //所用数据库表       
  32.       
  33.       
  34. header("programa:no-cache");  //没有缓存       
  35.       
  36. $id = intval($_GET["id"]);  //获取用户ID       
  37.       
  38. $connect = mysql_connect($_mysql["host"],$_mysql["user"],$_mysql["pwd"])   //在此设置好MYSQL数据库的用户名和密码       
  39.   or die("连接数据库失败".mysql_error());       
  40.          
  41. $select = mysql_select_db($_mysql["database"],$connect)       
  42.   or die("选择数据库失败".mysql_error());       
  43.          
  44. $result = mysql_query("SELECT n_day,all_click,all_once,today_click,today_once,about FROM $_mysql[table] WHERE id=$id")       
  45.   or die("查询数据库失败").mysql_error();       
  46.          
  47. $row = mysql_fetch_array($result);       
  48.       
  49. list($day,$all_click,$all_once,$today_click,$today_once,$about) = $row;       
  50.       
  51. $today = date("Ymd");       
  52. $cookiename = "statisu".$id;       
  53.       
  54. $all_click++;       
  55. if($day == $today){       
  56. $today_click++;       
  57.       
  58. if((!$_COOKIE[$cookiename]) or ($_COOKIE[$cookiename] < $today)){       
  59. $all_once++;       
  60. $today_once++;       
  61. }       
  62. setcookie($cookiename$today, time()+3600*24);       
  63.       
  64. }else{       
  65. $today_click = "1";       
  66. $all_once++;       
  67. $today_once = "1";       
  68. setcookie($cookiename$today, time()+3600*24);       
  69. }       
  70.       
  71. $result = mysql_query("UPDATE $_mysql[table] SET n_day=$today,all_click=$all_click,all_once=$all_once,today_click=$today_click,today_once=$today_once WHERE id=$id")       
  72.   or die("查询数据库失败").mysql_error();       
  73.       
  74. echo "全部点击:$all_click<br>全部人次:$all_once<br>今日点击:$today_click<br>今日人次:$today_once<br>站点信息:$about<br>";       
  75.       
  76. mysql_close($connect);       
  77. ?>