PHP记录点击数方法
1.第一种方法:
$id = $_GET['id']; //获取文章ID
$sql = "UPDATE base SET hits = hits+1 WHERE id = '$id'"; //数据库的执行语句
header("location: read.php?id=$id"); //跳转语句
给你思路,语句自己写..
数据库里除了题目,发表时间,内容这些你已经有的字段外,增加一个click字段,是用来记录被点击了多少次..
文章题目连接到一个count.php文件,用ID值传递..
然后连接数据库,把click中的值加1再保存,
然后用header函数跳转到文章显示页面,也是用ID值传递..
为了不给人恶意刷新,可以在count.php这个页面中加一个cookie,多少时间内点击视为一个点击..
2.第二种方法:
<?php
error_reporting(E_ALL);
$ROOT_PATH = '../';
include_once($ROOT_PATH . "include/config.php");
$update_time = 1800; //多长时间更新一次,单位是秒
$article_id = (isset($_GET['article_id']) && is_numeric($_GET['article_id']) && $_GET['article_id'] > 0) ? intval($_GET['article_id']) : 0; //文章的ID
if ($article_id > 0) {
$filename = $ROOT_PATH . 'log/click_log.txt';
$s = '';
if (file_exists($filename)) {
$content = file_get_contents($filename);
$d_ary = array();
if ($content) {
$ary = explode("/n", $content);
foreach ($ary as $line) {
$data_ary = explode('|', $line);
if (is_numeric($data_ary[0]) && is_numeric($data_ary[1])) {
$d_ary[$data_ary[0]] = $data_ary[1];
}
}
} if (array_key_exists($article_id, $d_ary)) {
$d_ary[$article_id] = $d_ary[$article_id] + 1; //将当前的文章的点击数加1
} else {
$d_ary[$article_id] = 1;
}
foreach ($d_ary as $key => $val) {
$s .= $key . '|' . $val . "/n";
}
} else {
$s .= $article_id . '|1' . "/n"; //这个是初始化记录文件
} //写记录文件
$fp = fopen($filename, "w"); //加入锁定
if (flock($fp, LOCK_EX)) {
// 进行排它型锁定
fwrite($fp , $s);
flock($fp , LOCK_UN); // 释放锁定
} //fwrite($fp, $s); fclose($fp); @chmod($filename, 0777);
$last_update = file_get_contents('../log/last_update.txt'); //取上一次更新的时间
$last_update = intval($last_update);
if (($last_update + $update_time) < time()) { //以下是数据库连接操作,我用的是ADODB,你可以改成你自己的
require_once("adodb.inc.php");
$db = NewADOConnection("$DB_TYPE");
$db->debug = true;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
if (!$db->Connect("$DB_HOST", "$DB_USER", "$DB_PASS", "$DB_DATABASE")) {
exit('<a href = "/">服务器忙, 请稍候再访问</a>');
}
$content = file_get_contents($filename);
$d_ary = array();
if ($content) {
$ary = explode("/n", $content);
foreach ($ary as $line) {
$data_ary = explode('|', $line);
if (is_numeric($data_ary[0]) && is_numeric($data_ary[1])) {
$sql = "UPDATE article SET hits=hits+" . $data_ary[1] . " WHERE id=" . $data_ary[0];
$db->Execute($sql);
}
}
} //点击数更新完了,将这个记录文件清空
$fp = fopen($filename, "w");
fwrite($fp, '');
fclose($fp);
@chmod($filename, 0777); //将最后一次更新时间改为当前时间
$fp = fopen('../log/last_update.txt', "w");
fwrite($fp, time());
fclose($fp);
@chmod('../log/last_update.txt ', 0777);
$db->Close();//关闭数据库连接
}
exit();
}?>
首先在log目录下创建last_update.txt
内容是 1155163400,(这是time()函数生成的时间)
click_log文件的内容是像下面这样的:
13136|44
13104|31
23509|32
11407|5
12141|29
第一个数字代表文章的ID,第二个数字代表累积的点击数
这样做,会提高程序的执行效率,无论是动态的PHP页面还是html里,以
<script src="click.php?article_id=333"></script>
这种方法的页面,都很有效.
这个一般用于统计文章等内容的点击数的
一般静态页里,像上面这样用的(可以把我上面的程序存成click.php)
动态页里的话,可以把上面的代码做成一个包含文件,然后在你的文章中include进来,不过,要改一下这个PHP的代码,把article_id传进去.
PHP记录点击数方法的更多相关文章
- MySQL把多个字段合并成一条记录的方法
转:http://www.111cn.net/database/mysql/71591.htm MySQL把多个字段合并成一条记录的方法 在mysql中字段合并可以使用很多函数来实现,如可以利用 GR ...
- paip.取当天记录的方法sql跟hql hibernate
paip.取当天记录的方法sql跟hql hibernate #------两个方法...函数法和日期计算法.. 函数法: DATEDIFF(d,createTime,GETDATE())=0 / ...
- MySQL查询及删除重复记录的方法
查询及删除重复记录的方法(一)1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select p ...
- MySQL删除重复记录的方法
参考网上的方法,总结了产出重复记录的方法,欢迎交流. 参考:http://www.cnblogs.com/nzbbody/p/4470638.html 方法1:创建一个新表临时储存数据 假设我们有一个 ...
- 用一条SQL语句取出第 m 条到第 n 条记录的方法
原文:用一条SQL语句取出第 m 条到第 n 条记录的方法 --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) * FROM Table id ...
- 【公众号系列】在SAP里查看条件记录的方法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]在SAP里查看条件记录的方法 ...
- aop 例外通知就是记录业务方法出现错误 并保存到日志里面的功能
aop 例外通知就是记录业务方法出现错误 并保存到日志里面的功能
- mysql使用GROUP BY分组实现取前N条记录的方法
MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道 ...
- 对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高不少,并且不受NTP等外部服务影响,能准确更准确来统计耗时(java中对应的是System.nanoTime),也就是说所有使用gettimeofday来统计耗时(java中是System.curre
对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高 ...
随机推荐
- windows 下查看端口占用命令
cmd netstat -ano
- 通过yocto给p1010rdb定制linux,并启动linux
一.通过yocto定制linux 1.安装yocto yocto只能在非root用户下编译,所以先新建一个用户. useradd chen passwd -d chen 重启电脑进入chen用户. ...
- vs 2013打开vs 2008解决方案问题解决
同时安装了vs 2013和vs 2008后,双击vs 2008的解决方案,会出现直接用vs 2013打开的问题. 解决以上问题: 右键选择VS 2008的解决方案,选择开发方式->选择默认程序, ...
- Java iText5.5.1 绘制PDF表格
iText下载链接:http://sourceforge.net/projects/itext/files/ 会有两个文件夹:extrajars中的extrajars-2.3.jar文件用于解决中文不 ...
- Oracle select 中case 的使用以及使用decode替换case
表结构如下: 将money<50的显示为贫农,money<80的显示为中农,其他的显示为富农,sql 语句如下 select name, case then '贫农' then '中农' ...
- 【Xamarin挖墙脚系列:常用的Mac 命令】
通俗点说Mac 跟Linux的爹都是Unix,他们都加入了标准的Shell命令工具,bash 所以俩系统中的命令基本通用 Linux下的操作手册,本人自己整理了一份.呵呵~~~~ 还可以使用客户端远程 ...
- 微软雅黑 firefox Css 设置 font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体";
font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体"; // 这里用引 ...
- syscomments 可以用来查找所有关于库中用到的某个关键词的所有相关脚本
syscomments SELECT * FROM syscomments
- 图的深度优先遍历DFS
图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...
- devStack
1,devstack shell 脚本开源官网 http://devstack.org/ 脚本功能快速搭建 OpenStack 的运行和开发环境 [Note tips by Ruiy devstack ...