#!/usr/bin/perl use strict; use warnings; use IO::Uncompress::Gunzip; use File::Type; my $ft = File::Type->new(); my @lines_found; my @files=glob('/kunden/homepages/20/d264326328/htdocs/logs/access.log*'); my %pipes; while(@files || keys(%pipes)) { if(keys(%pipes) >= 10 || @files==0) { for my $child (keys(%pipes)) { my $fh=$pipes{$child}; if(eof($fh)) { delete($pipes{$child}); next; } eval{ local $SIG{ALRM}=sub{die()}; alarm(1); while(<$fh>) { push(@lines_found,$_); } alarm(0); }; } next; } next unless(@files); my $file=shift(@files); next unless(-f $file); my $pid=open(my $child, '-|'); die("Fork failed!") unless(defined($pid)); if($pid) { $pipes{$pid}=$child; next; } child($file); } print $_ for(@lines_found); sub child { my $file=shift; my $fh=undef; my $ftype=$ft->mime_type($file); if($ftype=~/gzip/) { unless($fh=IO::Uncompress::Gunzip->new($file)) { warn "ERROR open Copressed $file ($IO::Uncompress::Gunzip::GunzipError)"; } } elsif($ftype=~/octet-stream|text/) { unless(open($fh, '<', $file)) { warn "ERROR open $file ($!)\n"; } } else { warn("ERROR open $file Filetype unknown ($ftype)\n"); } if($fh) { while(my $line=<$fh>) { print $line if($line=~m!"(?:POST |GET .*=(?:htt|ft|ph)p(?::|%3a)(?:/|%2f)).* HTTP/[0-9]\.[0-9]" [23][0-9]{2}!i) } close($fh); } exit; }