This is 赵峰 | 赵峰之城 | 赵峰的博客 !

PHP优化的点击数统计代码

一般用于统计广告页的点击数.

分析了一下28的访问统计,一大堆的update和insert,服务器上的mysql占用很高,所以就想了这种缓存更新的方式.
首先在log目录下创建last_update.txt,内容是 1155163400,(这是time()函数生成的时间).



click_log文件的内容是像下面这样的:
13136|44
13104|31
23509|32
第一个数字代表文章的ID,第二个数字代表累积的点击数

这样做,会提高程序的执行效率,无论是动态的PHP页面还是html里,以<script src="click.php?article_id=333"></script>或iframe来调用,都有效.


PHP页的话,可以把上面的代码做成一个包含文件,然后在你的文章中include进来,不过,要改一下代码,把article_id传进去.


<?php
error_reporting(E_ALL);
$ROOT_PATH = '../';
include_once($ROOT_PATH . "include/config.php");

//多长时间更新一次,单位是秒
$update_time = 1800;

//文章的ID
$article_id = (isset($_GET['article_id']) && is_numeric($_GET['article_id']) && $_GET['article_id'] > 0) ? intval($_GET['article_id']) : 0;
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)) {
           
            //将当前的文章的点击数加1
            $d_ary[$article_id] = $d_ary[$article_id]+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");
    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();
}
?>


下面的这个是他们在用的统计代码:

<?php
include "config.php";
if ($id=="")
{
  $id=0;
}

$leileicount=rand(1,1);

$cookie_bannerid="cookie_banner".$id;
if ($HTTP_COOKIE_VARS["$cookie_bannerid"]=="")
{
setcookie("$cookie_bannerid","$id",time()+43200);
}

if ($comeid=="")
{$comeid=0;}
if ($dlzid=="")
{
    $dlzid=0;
}
//流量统计
$time0=date("Y-m-d");
$sql_string="select id from count0 where bannerid='$id' and datetime0='$time0' and comeid='$comeid' and dlzid='$dlzid'";
$result=mysql_query($sql_string);
$rows=mysql_num_rows($result);

//独立ip流量统计
$userip=$REMOTE_ADDR;
$sql_stringip="select id from ipcount0 where bannerid='$id' and datetime0='$time0' and comeid='$comeid' and userip='$userip' and dlzid='$dlzid'";
$resultip=mysql_query($sql_stringip);
$rowsip=mysql_num_rows($resultip);

if ($rows>0)
{
//修改记录
if ($HTTP_COOKIE_VARS["$cookie_bannerid"]==$id)
    {
      $test=mysql_query("update count0 set count0=count0+$leileicount where bannerid='$id' and datetime0='$time0' and comeid='$comeid' and dlzid='$dlzid'",$db);
    }
else
    {
    if ($rowsip==0)
        {
          //独立ip增加新记录
          $into_dbip="insert into ipcount0 (bannerid,datetime0,comeid,userip,dlzid) values ('$id','$time0','$comeid','$userip','$dlzid')";
          $testip=mysql_query($into_dbip,$db);

          $test=mysql_query("update count0 set count0=count0+$leileicount,usercount0=usercount0+$leileicount,ipcount0=ipcount0+$leileicount where bannerid='$id' and datetime0='$time0' and comeid='$comeid' and dlzid='$dlzid'",$db);
        }
    else
        {
          $test=mysql_query("update count0 set count0=count0+$leileicount,usercount0=usercount0+$leileicount where bannerid='$id' and datetime0='$time0' and comeid='$comeid' and dlzid='$dlzid'",$db);
        }
    }
}
else
{
//增加新记录
$into_db="insert into count0 (bannerid,datetime0,comeid,dlzid) values ('$id','$time0','$comeid','$dlzid')";
$test=mysql_query($into_db,$db);

//独立ip增加新记录
$into_dbip="insert into ipcount0 (bannerid,datetime0,comeid,userip,dlzid) values ('$id','$time0','$comeid','$userip','$dlzid')";
$testip=mysql_query($into_dbip,$db);
}
mysql_close();
?>

Tags: 原创

« 上一篇 | 下一篇 »

只显示10条记录相关文章

诸葛亮 略懂 SEO (浏览: 279, 评论: 0)
仿陆游《卜算子 咏梅》以赠内子 (浏览: 656, 评论: 0)
人才测评系统 Web Service接口v2.0 开发手册 (浏览: 1437, 评论: 0)
同学开了vos童装专卖店,祝她发财! (浏览: 2456, 评论: 0)
php在shell模式定时crontab生成html静态页 (浏览: 1108, 评论: 0)
羽毛球运动员赵峰的简历 (浏览: 957, 评论: 0)
《老鼠米来》读后感 (浏览: 1033, 评论: 0)
2008年7月前工作计划和安排 (浏览: 1051, 评论: 0)
赵峰同志简历 (浏览: 949, 评论: 0)
赵峰,一个乐观诚信的创业者 (浏览: 876, 评论: 0)