- <?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);
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/011120136881.html
来源: http://www.codesnippet.cn/detail/011120136881.html