对apache访问日志的条件过滤以及统计

本文介绍了如何通过对Apache访问日志进行条件过滤和统计,以实现对特定广告点击量的后台跟踪。通过PHP代码示例展示了如何解析日志,筛选指定来源(如sohu)的访问记录,并统计特定时间段内特定页面(如hello.htm)的点击次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     遇到这样的事情,公司在别的网站投放了广告(比如搜狐),点击广告连接到我们自己的网站 ,广告是按点击量收费的。所以,公司要求我们自己做个后台统计点击统计量!           

        想想通过统计apache的访问日志,可以完成这件事情;        

       前台页面代码:

 <?php

        // 时间转化函数

      function Format2UnixTime ($str)
             {
            $time = $str;
            $time = str_replace("/"," ",$time);
            $time_array = explode( ":",$time,2);
            $time = $time_array[0]." ".$time_array[1];
            return strtotime($time);
             }

             $lines = file ('/logs/access_log');   //日志文件目录,windows下是access.log

            $i=0;   //声明变量

             foreach ($lines as $line_num => $line) {
                        if (preg_match ("/sohu/i",strtolower($line))) {     //过滤   (参看下面日志)
                                if (!preg_match ("/slurp/",strtolower($line))){
                                              preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
                                              $formatTime = Format2UnixTime($matches[4]);
                                              $access_time=strftime(" %Y-%m-%d %H:%M:%S " ,$formatTime);

                                                if(strtotime("$access_time")>=strtotime("$start_time") &&strtotime("$access_time") <= strtotime("$end_time") ){                          //取某段时间的日志信息
               
                                          if($matches[7] == "hello.htm"){           //点击广告,访问我们自己的网站页面;
                
              echo "<tr><td>".$matches[1]."</td><td>".$access_time."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><tr>";               
                 }
                               $i++;
                                  
                       
                }
                        }
                        }
             
              
      }

  echo "点击次数:  ".$i;

?> 
    

日志:

21.1.208.174 - - [04/May/2008:13:27:48 +0800] "GET /hello.htm HTTP/1.1" 200 14312    "http://www.sohu.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
//这是日志的内容 ,显示的格式我们可以在http.config中定义;

//上面的日志告诉我们在 2008年5月4日 ,ip地址21.1.208.174 点击了我们在sohu上投放的广告,访问我们的页面hello.htm;

日志过滤:

因为如果将所有的访问日志都放在一个日志文件中,那么这个日志文件将很大;

如果我们需要的访问日志放到一专门的文件中,那么将给我们带来方便;

如何做呢? apache文档中告诉我们了,使用SetEnvIf ;

我们在http.config文件中,加入

SetEnvIf Referer www/.sohu/.com test 
CustomLog logs/sohu_log common env=test

上面的代码表示,如果请求的url是www.sohu.com  那么,我们将这个访问日志放到test_log 中;

如果想在加几个过滤条件:

SetEnvIf Referer www/.sohu/.com test
SetEnvIf Referer www/.sina/.com test
CustomLog logs/test_log common env=test

上面代码表示 如果请求url 是搜狐或者新浪 都放到那个日志文件中;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值