使用示例:
$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);
}
}
}
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号