PHP统计后台log文件中URL页面浏览次数追加数据库

一、使用shell命令处理log文件

#使用的shell命令
if test -e ./*.log

then
time=$(date '+%Y%m%d%s' ); # 获得当前时间戳
mkdir $time; # 创建以时间戳命名的备份文件夹
mv *.log $time; # 将所有log移动到新创建的子文件夹中
grep -r "Request_uri = \/br\/" $time/*.log | cut -f 2- -d = | cut -f 4 -d / >all; # 将所有log文件中访问的url放入all文件中
awk '{a[$1]++}END{for(i in a){print i | "sort -r -k 2"}}' all >log_file; # 所有文件中访问的url排序统计后放入log_file.log中
awk '{a[$1]++}END{for(i in a){print a[i] | "sort -r -k 2"}}' all >count_file; # 所有文件中访问的url排序统计出的重复次数放入count_file.log中
php counturl.php --log=log_file --count=count_file; # 执行php脚本,生成sql文件
echo "执行成功";
else
echo "文件不存在";
fi

二、PHP代码实现,读取shell统计好的数据文件,数据库查询并追加相应数据

<?php
/**
* @description: 统计url页面的浏览次数
* @date: 2014-08-07
*/

/**
* @数据库链接
*/
include "init.php";

class CountNumber {

/**
* @需要统计的url
*/
private $log_file;

/**
* @需要统计的url浏览次数
*/
private $count_file;

/**
* * @需要生成的sql文件
*/
private $file_name = 'browse_count.sql';

/**
* @构造函数给文件名传值
*/
public function __construct($log_file, $count_file) {

$this->log_file = $log_file;
$this->count_file = $count_file;

}

/**
* @统计每个url页面浏览次数,生成sql文件
*/
public function CountUrl() {

file_put_contents($this->file_name, "use v9channels;\n");

$fp_log = fopen($this->log_file, 'r');
$fp_count = fopen($this->count_file, 'r');

while (!feof($fp_log)) {

$url_title = fgets($fp_log);
$url_title = addslashes(str_replace(array("\r\n", "\r", "\n"), "", $url_title));

$count = fgets($fp_count);
$count = addslashes(str_replace(array("\r\n", "\r", "\n"), "", $count));

if ($count !== 0 && $count !== '') {

$query = "select * from post where urltitle='".$url_title."';";
$list = MysqliClient::ExecuteQuery('intern', $query);

if ($list) {

file_put_contents($this->file_name, "update post set 'browse_count'='browse_count'+".$count." where urltitle='".$url_title."';\n", FILE_APPEND);

}
}
}
fclose($fp_log);
fclose($fp_count);
}
}

$args = Cli::GetAll();

$arg_log = Cli::Get('log');

$arg_count = Cli::Get('count');

$test=new CountNumber($arg_log,$arg_count);
$test->CountUrl();

注意: 1.可自行实现批量处理sql语句; 2.防止sql注入addslashes()。

打赏此文

如果您觉得本站的内容对您有所帮助,您可以扫描下面的二维码小额支付请我喝杯茶,感谢!打赏记录
支付宝
微信
承诺:凡打赏捐助的朋友,留言备注自己的邮箱,在打赏捐助时间点的6个月内,本站会每周邮件推送原创专业技术博文,供大家学习和参考!

留下评论

All fields marked (*) are required