发信人: dalasthunder() 
整理人: dalasthunder(2002-07-25 06:05:26), 站内信件
 | 
 
 
<?
 #
 # 访客计数器文件 counter.inc.php
 # Author: Dallas Thunder
 #        Copyright (C) 2000
 # 用法:
 #    在需要被计数的页面中加入
 #    include "counter.inc.php"
 #    然后调用MyCounter()即可计数,本函数不产生任何输出。
 #  需要显示输出的话,可以在显示计数器值的地方这样调用:
 #    WriteCounter(MyCounter());
 #    可以修改WriteCounter()函数以按照指定的格式输出
 # 优点:
 #  可以简单的给每个页面加入计数器,使用同一个计数文件,
 #  便于管理并且可以加入注释,在需要的时候才显示计数器的值
 # 缺点:
 #  要进行大量磁盘读写操作,速度慢,不实用
 #  
 
 # 计数文件名
 $counterFile = "d:/wwwroot/counter/counter.txt";
 
 # 计数文件格式:
 # <页面名>:<计数值>
 # 每个页面的记录为单独一行
 
 # 取得本页面的名称,按每页的名称在计数文件中加入一条记录
 $PageFile = $_SERVER["PHP_SELF"];
 
 function MyCounter() {
     global $PageFile, $counterFile;
 
 # 如果计数文件不存在就生成一个
     if( !file_exists( $counterFile ) ) {
         $fp = fopen( $counterFile, "a+" );
 
     # 为了用notepad查看文件,在换行前加回车
         fwrite( $fp, "$PageFile:0\x0D\n" );
         fclose($fp);
     }
 
 # 读取计数文件
     $contents = file($counterFile);
     $num = 0;
 
 # 重写计数文件
     $fp = fopen( $counterFile, "w" );
     for( $i = 0; $i < count( $contents ); $i++ ) {
 
     # 计数文件中以“#”开头的行为注释,原样写回
         if( ereg( "^#", $contents[$i] ) ) {
             fwrite( $fp, $contents[$i] );
             continue;
         }
         $pieces = explode( ":", $contents[$i] );
 
     # 如果不是本页面的记录,原样写回
         if( $PageFile != $pieces[0] ) {
             fwrite( $fp, $contents[$i] );
             continue;
         }
 
     # 本页计数器加一(用$pieces[1] ++似乎不能自动转换类型,用+=1可以)
 
         $pieces[1] += 1;
         $num = $pieces[1];
 
     # 将新值写入计数文件
         fwrite( $fp, "$pieces[0]:$pieces[1]\x0D\n" ); 
     }
 
 # 如果没有本页的计数就添加一行,计数器为1
     if( $num == 0 ) {
         fwrite( $fp, "\x0D\n$PageFile:1" ); 
         $num += 1;
     }
     fclose( $fp );
 
 # 返回本页面计数器的新值
     return $num;
 }
 
 # 简单的用蓝色显示六位计数器的值,用“0”补齐
 function WriteCounter( $num ) {
     printf( "<font color=blue>%06d</font>", $num );
 }
 ?>
  | 
 
 
 |