一般用于统计广告页的点击数.
分析了一下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();
?>