+ -
当前位置:首页 → 问答吧 → 计数器~(1.1.0)

计数器~(1.1.0)

时间:2007-04-24

来源:互联网

功能:

@同一IP每日只记录一次
@可查阅近N日记录~


  哈,临时测试写的,喜欢不用数据库做计数器的可以看看~

可以指定图片序列作为显示


本样例支持文字&图片,没使用GD库,很容易上手~

log目录里都是测试文件,大家测试后可以直接删除。配置的时候log目录要允许web组用户可写~

改进:允许多样式选择,可自主修改,添加,支持多扩展名图示
Version:1.0.0 地址:http://www.phpchina.com/bbs/thread-23827-1-1.html
复制PHP内容到剪贴板
PHP代码:

<?php
/**
 *
 *  计数器(v1.1.0)
 *
 *  Version : 1.1.0
 *  Author  : 村长
 *  PHP     : >4.3
 *  
 */
class Counter
{
    var $CountFolder;
    var $countType;
    var $showtype;
    var $imgArray;

    function Counter()
    {
        $this->countType = 0;
        $this->showtype = "GetCountByDay";
        $this->imgArray = array();
        $this->MakeCounter();
    }

    function MakeCounter()
    {
        $this->CountFolder = "log/".date("Ymd");
        if(!is_dir($this->CountFolder))
        {
            mkdir($this->CountFolder,0777);
        }
        $this->_DoCount();
    }

    //Save data file
    function _DoCount()
    {
        $file = date("Ymd").ip2long($_SERVER['REMOTE_ADDR']).".txt";
        if(!file_exists($this->CountFolder."/".$file))
        {
            $fp = @fopen($this->CountFolder."/".$file,"wb+");
            //这里可以保存其他需要的日志记录
            @fputs($fp,$_SERVER['REMOTE_ADDR']);
            @fclose($fp);
        }
    }

    //获得指定时间的统计数据
    //默认为1天 0 为取所有
    function GetCountByDay($day=1)
    {
        //今日的时间戳
        $today = strtotime(date("Y-m-d"));
        $all = 0;
        for($i=$day;$i>=0;$i--)
        {
            $tsp = $today-(86400*$i);
            $folder = "log/".date("Ymd",$tsp)."/*.txt";
            $ta = glob("$folder");
            $all= $all+ count($ta);
        }
        return $all;
    }

    function GetCountUseImg($day=1)    
    {
        $allnumber = $this->GetCountByDay($day);
        for($i=0;$i<strlen($allnumber);$i++)
        {
            $idx = substr($allnumber,$i,1);
            $returnVal.= sprintf("<img src=\"%s\">",$this->imgArray[$idx]);
        }
        return $returnVal;
    }    

    function SetStyle($style='',$ext="gif")
    {
        $imgprefix ="img/";
        $folder = $imgprefix.$style;
        foreach(range(0,9) as $num)
        {
            $this->imgArray[$num] = $folder."/".$num.".$ext";
        }
        if(is_dir($folder))
        {
            $this->showtype = "GetCountUseImg";
        }
        else 
        {
            $this->showtype = "GetCountByDay";
        }
    }
    
    function Show($day=0)
    {
        return $this->{$this->showtype}($day);
    }
}

//实例计数器对象
$counter = new Counter();

//采用 sports98 样式显示,告知默认扩展名为png格式
$counter->SetStyle("sports98","png");
echo "<br />今日访问:".$counter->Show(0);

//采用S1样式显示,默认扩展名为 gif
$counter->SetStyle("s1");
echo "<br />近3日访问:".$counter->Show(2);

//----只显示文字的计数器
$counter->SetStyle("-");
echo "<br />近3日访问:".$counter->Show(2);
?>

[ 本帖最后由 sports98 于 2007-4-24 14:56 编辑 ]

作者: sports98   发布时间: 2007-04-24

刚才忘了

作者: sports98   发布时间: 2007-04-24

支持一下

作者: 默默   发布时间: 2007-04-24

支持一下的说

作者: wwwfk   发布时间: 2007-04-24

支持!

作者: phperchina   发布时间: 2007-05-01

作者: wrs_1983   发布时间: 2007-05-05

支持!好想法。

作者: 木�^   发布时间: 2007-05-05

没有注释,唉

作者: heixiake   发布时间: 2007-05-05