TP行为简单例子--防刷新计数器

jerry thinkphp 2015年11月20日 收藏
花了一段时间,总算理解了TP行为的概念,写了一个简单的防刷新的计数器,有什么不足之处,欢迎大家指正。
首先配置项目的Conf文件夹下的tags.php文件
<?php
return array(
    'view_filter'   =>  array(
        'Counter'
    ),
   
);
在项目的Behavior目录下
建立CounterBehavior.class.php文件
<?php
/**
 * 计数器行为:
 * 
 */
class CounterBehavior extends Behavior 
{
    // 行为参数定义(默认值) 可在项目配置中覆盖
    protected $options   =  array(
        'Counter_ON'       => true// 是否开启计数器
        );
    public function run(&$content)
    {
        if(C('Counter_ON'))
        {
            $file=$_SERVER['DOCUMENT_ROOT'].dirname().'/counter.txt';
            $hits=intval(file_get_contents($file));
            $nums=str_split($hits);
            $pic="";
            $imgpath=dirname().'/Public/images/counter/';
            foreach ($nums as $num) {
                $pic.="<img src=\"$imgpath$num.png\" alt=\"$num\" />";
            }
            $content = str_replace('{__Counter__}',$pic,$content);
            $hits++;
            if(!session('?counter'))
            {
                $handle=fopen($file, "w");
                flock($handle, LOCK_EX+LOCK_NB);
                fwrite($handle, $hits);
                flock($handle, LOCK_UN+LOCK_NB);
                fclose($handle);
                session('counter',time());
            }
        }
        else
        {
            $content = str_replace('{__Counter__}','',$content);
        }
    }
}
然后在需要使用计数器的模板文件里加上{__Counter__}即可