flag_truncs.pl
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:2k
- #!/usr/local/bin/perl
- # flag_truncs.pl - martin hamilton <m.t.hamilton@lut.ac.uk>
- #
- # Check the CERN/Harvest/Netscape cache for truncated objects
- # - i.e. those for which there is a "Content-length:" HTTP header,
- # and this does not match the size of the cached object
- # $Id: flag_truncs.pl,v 1.1.1.1 1996/02/22 06:23:57 wessels Exp $
- require "getopts.pl";
- require "stat.pl";
- &Getopts("cd");
- # -c -> just count the number of objects with a Content-length header
- # -d -> turn on debugging output
- # pass filenames on command line or via STDIN
- @things = $#ARGV >= 0 ? @ARGV : <STDIN>;
- $total_objects = 0, $content_length = 0;
- # iterate through them
- foreach $thing (@things) {
- chop $thing;
- $opt_d && (print STDERR ">> inspecting: $thingn");
- next if -d "$thing"; # don't want directories
- $size = (stat($thing))[$ST_SIZE]||next;
- $opt_d && (print STDERR ">> stat: $sizen");
- print "$thingn", next if ($size == 0);
- $total_objects++;
- $count = 0, $expected = 0;
- open(IN, "$thing") || die "Can't open cached object $thing: $!";
- while(<IN>) {
- $count += length($_);
- chop;
- print STDERR ">> inspecting $_n" if $opt_d;
- last if /^(s+|)$/; # drop out after the end of the HTTP headers
- # skip if cached file appeared since script started running
- if (-M $_ < 0) {
- print STDERR ">> skipping $_n" if $opt_d;
- next;
- }
-
- if (/^Content-length:s+(d+)/i) {
- $expected = $1;
- $content_length++;
- }
- }
- close(IN);
- next if $opt_c;
- next if $expected == 0; # no Content-length header
- # looked at the headers now
- $difference = $size - $count;
- $opt_d && print STDERR ">> real: ", $difference, ", expected: $expectedn";
- if ($difference != $expected) {
- print "$thing (expected: $expected, got: $difference)n";
- }
- }
- print "$content_length out of $total_objects had Content-length: headern"
- if $opt_c;