• 技术文章 >php教程 >PHP源码

    PHP浏览次数统计类visit.class.php配合文本缓存

    PHP中文网PHP中文网2016-05-25 17:06:06原创581
    使用示例:
    $visit = app::loader('visit');
    $article_id = 20722;
    $visit->count('article', $article);

    <?php
    
    class visit
    {
    
    public $expires = array();
    public $tables = array();
    
    
    public function __construct()
    {
    $this->expires['article'] = 10;
    $this->tables['article'] = 'pcb_article';
    
    $this->expires['forum'] = 9;
    $this->tables['forum'] = 'pcb_forum';
    
    $this->expires['blog'] = 8;
    $this->tables['blog'] = 'pcb_blog';
    }
    
    
    
    public function count($channel, $id)
    {
    $path = $this->get_cache_path($channel);
    
    $this->update($path, $channel, $id);
    }
    
    
    private function get_cache_expires($channel)
    {
    $expires = isset($this->expires[$channel]) ? $this->expires[$channel] : 10;
    return $expires;
    }
    
    private function get_cache_path($channel)
    {
    $time = time();
    $minute = date('H', $time) * 60 + date('i', $time);
    $expires = $this->get_cache_expires($channel);
    
    $path = SYS_PATH ."/data/cache/visit/{$channel}". ceil($minute / $expires) .".txt";
    return $path;
    }
    
    
    private function update($path, $channel, $id)
    {
    $dir = dirname($path);
    if (!file_exists($dir))
    make_dir($dir);
    
    if (file_exists($path))
    {
    file_put_contents($path, ',' . $id, FILE_APPEND|LOCK_EX);
    }
    else
    {
    $table = $this->tables[$channel];
    $mysql = app::loader('mysql');
    $hand = opendir($dir);
    while (($file = readdir($hand)))
    {
    if (preg_match("/{$channel}/", $file))
    {
    $visit = file_get_contents("{$dir}/{$file}");
    $array = explode(',', $visit);
    $array = array_count_values($array);
    unset($array['']);
    
    $sql = '';
    foreach ($array as $id => $visit)
    {
    $sql .="UPDATE `{$table}` SET `visit` = `visit` + {$visit} WHERE `id` = {$id} LIMIT 1;";
    }
    if ($sql)
    {
    $res = $mysql->executes($sql);
    if ($res)
    unlink($dir . '/' . $file);
    }
    unset($sql);
    }
    }
    
    file_put_contents($path, ',' . $id, LOCK_EX);
    }
    }
    
    }
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:WP_Crack(批量爆破Wordpress 账户) 下一篇:PHP验证生日
    PHP编程就业班

    相关文章推荐

    • php 多种无限分类实例• 剖析PHP中的输出缓冲 flush之类• PHP实现各种经典算法• php截取中文字符串不乱码的方法_php实例• php 广告点击统计代码

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网