PHP 分析一个日志文件?

冷了个冷的热热 2015-11-26 04:37:12
192.168.1.105 - - [25/Nov/2015:17:53:06 +0800] "GET /favicon.ico HTTP/1.1" 404 31 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.1.105 - - [25/Nov/2015:17:53:06 +0800] "GET /admin/d1/cl HTTP/1.1" 200 60 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.1.106 - - [25/Nov/2015:17:53:29 +0800] "GET /admin/d1/post_pd HTTP/1.1" 200 61 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.1.106 - - [25/Nov/2015:17:55:53 +0800] "GET /admin/d1/post_id?pid=1&rid=1&imgname=1.jpg HTTP/1.1" 200 61 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.1.105 - - [25/Nov/2015:17:57:39 +0800] "GET /admin/d1/post_irimg HTTP/1.1" 200 61 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.1.105 - - [25/Nov/2015:18:03:15 +0800] "/admin/d1/get_id?pid=13333333333HTTP/1.1" 404 1333 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
192.168.1.105 - - [26/Nov/2015:09:53:10 +0800] "GET /admin/V1/post_id HTTP/1.1" 200 61 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"

请问 这样一个日志文件 怎么用PHP代码解析 怎么实现输出有多少个ip访问(总访问量,有多少个不同的IP访问(数量) 怎么实现一分钟内有多少访问量? 求大神代码示例啊,实在不知从何下手写.....
...全文
411 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小画家~ 2019-04-02
  • 打赏
  • 举报
回复
这个是访问日志 的梳理!
  • 打赏
  • 举报
回复
真的有用 , 再次感谢 , 虽然我不是处理日志 , 是处理其他文件..
  • 打赏
  • 举报
回复
谢谢大神 !
xuzuning 2015-11-30
  • 打赏
  • 举报
回复
$data = array (
  0 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/favicon.ico',
    'mode' => '404',
  ),
  1 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/admin/d1/cl',
    'mode' => '200',
  ),
  2 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445209,
    'target' => '/admin/d1/post_pd',
    'mode' => '200',
  ),
  3 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445353,
    'target' => '/admin/d1/post_id?pid=1&rid=1&imgname=1.jpg',
    'mode' => '200',
  ),
  4 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445459,
    'target' => '/admin/d1/post_irimg',
    'mode' => '200',
  ),
  5 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445795,
    'target' => '404',
    'mode' => 'Mozilla/5.0',
  ),
  6 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448502790,
    'target' => '/admin/V1/post_id',
    'mode' => '200',
  ),
);
foreach($data as $v) @$r[date('Y-m-d H:i', $v['date'])]++;
print_r($r);
Array
(
    [2015-11-25 17:53] => 3
    [2015-11-25 17:55] => 1
    [2015-11-25 17:57] => 1
    [2015-11-25 18:03] => 1
    [2015-11-26 09:53] => 1
)

  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
假定你的这些数据存放于 log.txt 中 那么
$a = file('log.txt');
foreach($a as $r) {
  $t = preg_split('/[- ["]+/', $r);
  $d[] = array(
    'ip' => $t[0],
    'date' => strtotime(preg_replace('/[\/:]/', ' ', $t[1], 3)),
    'target' => $t[4],
    'mode' => $t[6],
    );
}
var_export($d);
将得到这样的数组
array (
  0 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/favicon.ico',
    'mode' => '404',
  ),
  1 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/admin/d1/cl',
    'mode' => '200',
  ),
  2 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445209,
    'target' => '/admin/d1/post_pd',
    'mode' => '200',
  ),
  3 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445353,
    'target' => '/admin/d1/post_id?pid=1&rid=1&imgname=1.jpg',
    'mode' => '200',
  ),
  4 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445459,
    'target' => '/admin/d1/post_irimg',
    'mode' => '200',
  ),
  5 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445795,
    'target' => '404',
    'mode' => 'Mozilla/5.0',
  ),
  6 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448502790,
    'target' => '/admin/V1/post_id',
    'mode' => '200',
  ),
)
应该知道该怎么做了吧? 自己得动动脑子的! 实在不行再说
大神我拿出时间date了 可是不知道怎么实现每分钟有多少访问啊?
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
$data = array (
  0 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/favicon.ico',
    'mode' => '404',
  ),
  1 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/admin/d1/cl',
    'mode' => '200',
  ),
  2 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445209,
    'target' => '/admin/d1/post_pd',
    'mode' => '200',
  ),
  3 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445353,
    'target' => '/admin/d1/post_id?pid=1&rid=1&imgname=1.jpg',
    'mode' => '200',
  ),
  4 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445459,
    'target' => '/admin/d1/post_irimg',
    'mode' => '200',
  ),
  5 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445795,
    'target' => '404',
    'mode' => 'Mozilla/5.0',
  ),
  6 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448502790,
    'target' => '/admin/V1/post_id',
    'mode' => '200',
  ),
);
foreach($data as $v) @$r[date('Y-m-d H:i', $v['date'])]++;
print_r($r);
Array
(
    [2015-11-25 17:53] => 3
    [2015-11-25 17:55] => 1
    [2015-11-25 17:57] => 1
    [2015-11-25 18:03] => 1
    [2015-11-26 09:53] => 1
)

谢谢大神!太厉害了!!!!
傲雪星枫 2015-11-26
  • 打赏
  • 举报
回复
可以使用工具实现,例如:LogAnalyzer 参考:http://www.cnblogs.com/cocowool/archive/2010/09/07/1820626.html
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
假定你的这些数据存放于 log.txt 中 那么
$a = file('log.txt');
foreach($a as $r) {
  $t = preg_split('/[- ["]+/', $r);
  $d[] = array(
    'ip' => $t[0],
    'date' => strtotime(preg_replace('/[\/:]/', ' ', $t[1], 3)),
    'target' => $t[4],
    'mode' => $t[6],
    );
}
var_export($d);
将得到这样的数组
array (
  0 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/favicon.ico',
    'mode' => '404',
  ),
  1 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/admin/d1/cl',
    'mode' => '200',
  ),
  2 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445209,
    'target' => '/admin/d1/post_pd',
    'mode' => '200',
  ),
  3 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445353,
    'target' => '/admin/d1/post_id?pid=1&rid=1&imgname=1.jpg',
    'mode' => '200',
  ),
  4 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445459,
    'target' => '/admin/d1/post_irimg',
    'mode' => '200',
  ),
  5 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445795,
    'target' => '404',
    'mode' => 'Mozilla/5.0',
  ),
  6 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448502790,
    'target' => '/admin/V1/post_id',
    'mode' => '200',
  ),
)
应该知道该怎么做了吧? 自己得动动脑子的! 实在不行再说
好的好的,谢谢大神的教诲 我先去研究看一下,谢谢!
xuzuning 2015-11-26
  • 打赏
  • 举报
回复
假定你的这些数据存放于 log.txt 中 那么
$a = file('log.txt');
foreach($a as $r) {
  $t = preg_split('/[- ["]+/', $r);
  $d[] = array(
    'ip' => $t[0],
    'date' => strtotime(preg_replace('/[\/:]/', ' ', $t[1], 3)),
    'target' => $t[4],
    'mode' => $t[6],
    );
}
var_export($d);
将得到这样的数组
array (
  0 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/favicon.ico',
    'mode' => '404',
  ),
  1 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445186,
    'target' => '/admin/d1/cl',
    'mode' => '200',
  ),
  2 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445209,
    'target' => '/admin/d1/post_pd',
    'mode' => '200',
  ),
  3 => 
  array (
    'ip' => '192.168.1.106',
    'date' => 1448445353,
    'target' => '/admin/d1/post_id?pid=1&rid=1&imgname=1.jpg',
    'mode' => '200',
  ),
  4 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445459,
    'target' => '/admin/d1/post_irimg',
    'mode' => '200',
  ),
  5 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448445795,
    'target' => '404',
    'mode' => 'Mozilla/5.0',
  ),
  6 => 
  array (
    'ip' => '192.168.1.105',
    'date' => 1448502790,
    'target' => '/admin/V1/post_id',
    'mode' => '200',
  ),
)
应该知道该怎么做了吧? 自己得动动脑子的! 实在不行再说

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧