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传进去.

时间: 2024-11-05 09:31:29

PHP记录点击数方法的相关文章

MySQL删除重复记录的方法

参考网上的方法,总结了产出重复记录的方法,欢迎交流. 方法1:创建一个新表临时储存数据 假设我们有一个存在多个字段的表,表中有部分数据的若干字段重复,此时我们可以使用DISTINCT这个关键字对表数据进行筛选. 1 CREATE [TEMPORARY] TABLE temp LIKE origin_tb; 2 INSERT temp(attr1,attr2,...) SELECT DISTINCT attr1,attr2,... FROM origin_tb; 3 DELETE FROM ori

用一条SQL语句取出第 m 条到第 n 条记录的方法

原文:用一条SQL语句取出第 m 条到第 n 条记录的方法   --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) SELECT TOP n-m+1 * FROM Table WHERE (id NOT IN (SELECT TOP m-1 id FROM Table )) --从TABLE表中取出第m到n条记录 (Exists版本) SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists (Select * From 

SQL语句删除表中所有记录的方法

如何用一条sql语句删除表中的所有记录,这里分享下我的方法.参考链接: sql语句如何删除重复记录?四种方法 sql语句如何删除重复记录?教程详解 TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. 语法TRUNCATE TABLE name 参数name 是要截断的表的名称或要删除其全部行的表的名称. 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度

mysql使用GROUP BY分组实现取前N条记录的方法

MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): 结果: 方法一: SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score group by a.id,a.

查询数据库中重复记录的方法

select * from [DataBase].[dbo].[TableName] where [字段一] in (select [字段一] from [DataBase].[dbo].[TableName] group by [字段一] having count([字段一]) > 1) 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from peop

paip.取当天记录的方法sql跟hql hibernate

#------两个方法...函数法和日期计算法.. 函数法: DATEDIFF(d,createTime,GETDATE())=0   //d指定为day hb也有一样的函数.. 日期 计算法: where  createTime>='2014-5-4 00:00:01' and createTime<='2014-5-4 23:59:59' where  createTime='2014-5-4 00:00:00' 应该优先使用日期 计算法,,因为这个方法能使用索引了...不个日期时间转换为

记录每个方法的执行时间 AOP

package com.aop; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class MyAspect { private static final Logger LOGGER=Logger.getLogger(MyAspect.class); //输出到指定文件 //private static f

从远程oracle上导入到本地同一张表中不存在的记录的方法

场景:在远程oracle上存在一张表A,在本地同样存在一张相同表结构的表B.由于本地表B中保存了业务系统操作产生的几条记录,同时原来导入了A中的部分记录,但是并没有保存A中全部的记录.A中有15条记录,B中保存了A中3条记录同时B中还有本地业务系统产生的4条记录,不能删除B中的业务系统产生的4条记录.现在想将A中的另外的12条记录导入B中,同时有能保留B中原来的由业务系统产生的4条记录. 解决sql: 1.先在A中获得在B中出现过的记录. select * from [email protect

SQL Server中遍历表中记录的方法

遍历表有下面几种方法 1.使用游标 2.使用表变量 3.使用临时表 下面通过一个实例分别介绍三中方法的实现: 1.需求 给HR.Employees表,fullname 列赋值,其值为 firstname+lastname 为了演示表的遍历,忽略 UPDATE HR.Employees SET fullname= firstname+' '+lastname; 的实现方式 2.使用游标 使用游标的代码主要有以下几个步骤,声明游标,打开游标,使用游标,关闭游标和释放游标. -- 方法1:游标 --