程序其实很简单,主要是正则查询,这里就简单说一下基本思路,有兴趣的朋友可以自行尝试看看。
首先,需要获取日志文件夹下的日志文件。这里需要把日志文件夹指定到当前站点下,并给予iis用户的读取和写入权限(方便远程删除)。如果还需要远程查阅,还需要指定log的mime类型为text/plain。
主要代码,遍历日志文件夹:glob($path.'*.log');
(我这里因为修改了日志字段,为了测试把之前的日志都删除了,就这一条,应该是会把日志文件夹下的所有日志文件列举出来的)
然后就是分析日志了。每个人可能有不同的分析方法和思路。我这里是按蜘蛛来分类的,并列举其下图片、样式、js、html及404情况。
主要代码,判断该条日志中是否包含指定内容(注意过滤假蜘蛛,我这里是根据所有已知的蜘蛛ip段来匹配,匹配到了再判断是否有满足条件的内容):if(stristr($value,'.css')) $spiders[$v][4]+=1;
值得注意的是,日志中会有很多假蜘蛛,这个对于我们的分析来说会有不良效果,所以你最好把假蜘蛛排除掉!
主要代码,通过正则匹配到需要的时间、目标、状态码和ip地址等内容:preg_match_all('/([\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2})/',$value,$time);
上图是具体的访问情况。需要说明的有几点。
1、访问ip这里是保留的一个功能,之前把假蜘蛛也记录出来了,之所以有个查询功能(调用ip138查询,能判断出是否蜘蛛)是怕判断错误,导致真实蜘蛛也未纳入统计。
2、当前这个站点绑定了很多二级域名,为了区分受访的到底是哪个域名,在iis字段中加入了主机一列,并利用js实现查找、过滤进行分析。
最后,值得说明的事,因为采集、假蜘蛛、及真实用户等数量可能非常庞大,导致iis日志文件太大太大,找个程序就有点卡壳了。为了尽可能减小iis日志的大小,我对用户ip(包括假蜘蛛)做了限制,当访问到一定数量后需要人工验证。另外,把iis日志中的用户名、服务器名称、服务器ip、方法、协议状态、字节、时长等字段都去掉了。
© 致远 2022-12-11,原创内容,转载请注明出错:php写iis日志分析程序