计数器类
功能:根据传入参数,再实现计数的读取,写入并返回最新计数结果使用说明:
创建实例,调用构造函数,需传入三个参数(url,counter,filename)
/////////////////
$counter=new Counter("bb",100,"counter.txt");
echo $counter->ReadCounter();//调用读文本文件内容并得到该页面的访问量
$counter->WriteCounter(); //把内容写到文本文件中
//////////////////
详细说明:
url:要计数的页面地址(标识)
counter:初始值数量 (递增数量为1)
filename:地址/文件名,若该文件不存在,则在指定的地址新建文件ReadCounter()函数完成读取文件文件,并调用FindCounter()函数
FindCounter()函数完成查找、剖开、合并字符串数组,结果得到最新的内容
WriteCounter()函数完成将最新的内容写入文本文件
=====================================================
class Counter
{
var $_url; //url变量相当标识
var $_counter;//计数总量
var $_con;//用来存放读出来的文件
var $_file;//文件名
var $_findkey;//访问量

//构造函数,将成员变量赋值
function Counter($url,$counter,$filename)
{
  $this->_url=($url=="")?$this->ShowMsg("不能为空"):$url;//如果$url为空则跳出
  $this->_counter=($counter=="")?0:$counter; //将计数赋给成员变量
  $this->_file=($filename=="")?$this->ShowMsg("文件名不能为空"):$filename;//将文件名赋给成员变量
}
//该函数读文本文件
function ReadCounter()
{
 if(!file_exists($this->_file)) //如果不存在该文件,则新建
 { 
    $fp=fopen($this->_file,"w+");
    fclose($fp);
 }

 
 if(!$fp=fopen($this->_file,"r"))//以只读方式打开
$this->ShowMsg($this->_file."文件不能以只读方式打开");
 else
        {
if(flock($fp,LOCK_SH))//共享锁用于读取
{
$this->_con=fread($fp,filesize($this->_file));//读文件内容
flock($fp,LOCK_UN);//释放
fclose($fp);
$this->FindCounter(); //调用查找,看此url是否已经存在
//$this->WriteCounter();
return $this->_findkey;//返回查找的结果
}
  }
}

//该成员函数实现写入文本文件
function WriteCounter()
{
  if(!$fp=fopen($this->_file,"w"))//以只读方式打开
   $this->ShowMsg($this->_file."不能以写入");
  else
  {
   
if(flock($fp,LOCK_EX))//独占锁
    {
       if(!fwrite($fp,$this->_con))
 $this->ShowMsg($this->_con." 写入".$this->_file."失败");
   flock($fp,LOCK_UN);//释放
}
  }
  fclose($fp);
}

//该函数实现查找并合并数组功能:查找指定的url如果存在则后面的访问数量加1,若不存在则在新建数组下标并赋值
// 格式:[url] 访问数量||[url1] 访问数量1||[urln] 访问数量n
//
function FindCounter()
{
  if($this->_con!="")
  {
$arr=explode("||",$this->_con);
for($i=0;$i<count($arr);$i++)

$f_loc=strpos($arr[$i],"[");//出现符号"["的最初位置
if($f_loc!==false)
$f_loc+=1;
$l_loc=strpos($arr[$i],"]");//出现符号"]"的最初位置
if($l_loc!==false)
$l_loc=$l_loc-1;
$f_url=substr($arr[$i],$f_loc,$l_loc);
if($this->_url==$f_url) //如果查找到
{
    $varr=explode(" ",$arr[$i]);
if($varr[1]<$this->_counter)//用于修改访问量初值使用,如果修改后的大于原来的访问量,则把以前的访问量与新修改的初值相加
  $varr[1]+=$this->_counter;
else //反之则加1
  $varr[1]++;
$arr[$i]=$varr[0]." ".$varr[1];
$flag=1;
$this->_findkey=$varr[1]; //将查找的浏览量赋给成员变量$_findkey
}
}
if(!isset($flag)) //如果不存在所查找的url则新建
  $arr[$i+1]="[".$this->_url."] ".$this->_counter;
 $this->_con=implode("||",$arr);// 再将字符合并
}
else
  $this->_con="[".$this->_url."] ".$this->_counter; //将合并的新内容赋给成员变量$_con
}


//该函数功能:显示提示信息
function ShowMsg($str)
{
  echo $str;
  exit;
}
}
==============================================
这个是应用于文本的,呵呵,写的不好,而且如果计数器过多的话,用文本有弊端,同时读取有问题的