龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

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

时间:2014-07-22 14:49来源: 作者: 点击:
分享到:
该类用于统计页面浏览次数,目前正在我的网站 a href=http://www.pcpob.comwww.pcpob.com/a (泡泡站长网)中使用,大家可以根据需要修改。 br / 因为使用的虚拟主机,所以无法使用 memcache 。
该类用于统计页面浏览次数,目前正在我的网站 www.pcpob.com (泡泡站长网)中使用,大家可以根据需要修改。
因为使用的虚拟主机,所以无法使用 memcache 。

使用示例:
$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);
		}
	}

}
精彩图集

赞助商链接