基于文本方式的带锁计数器
    最近我做了一个带锁的文本方式计数器,目前放在我在奥索的主页上运行。该程序首先判断是否有计数器文件,若无则生成一个并设初值为0。需要计数时读取计数器文件原来的值,加一后再写回计数器文件。
    在写计数器文件时用flock进行写锁定,在关闭文件时进行读写锁定。
    
 <?php
//*************************
// 计数器 TextCounter()
//  作者  abccs
//  http://abccs.oso.com.cn
//   2001.5.4
//  (引用时请保留此部分)
//*************************

function TextCounter() {

$TxtCounterFile="counterfile.txt";  //计数器文件,记录访问次数

if (!file_exists($TxtCounterFile)) {  //是否存在计数器文件
    
if (!file_exists(dirname($TxtCounterFile))) {
      
mkdir(dirname($TxtCounterFile), 0700);
    }
    
$fp=fopen($TxtCounterFile,"w");  //生成计数器文件
 
   
if(flock($fp,2))    //写锁定
       
{
          
fputs($fp,0);   //计数器初始值为0
       
}
    if(
flock($fp,3))   //读写锁定
          
fclose($fp);
}

  
$fp fopen($TxtCounterFile,"rw");
  
$num fgets($fp,15);  //读取计数器原来的计数值
  
fclose($fp);
  
$num += 1;    //计数器加1
  
print "$num"//输出计数值

   
$fp=fopen($TxtCounterFile,"w");
   if(
flock($fp,2))      //写锁定
     
{
         
fputs($fp,$num); //保存新计数值
     
}
   if(
flock($fp,3))    //读写锁定
         
fclose($fp);
}

    
在需要显示计数的地方加上<?php TextCount(); ?>就可以了。该程序在我的主页上运行正常,有兴趣者可以去参观  http://abccs.oso.com.cn
在Windows98下需将所有的flock语句去掉。