#! c:/perl/bin/perl # # flist2.cgi # # 2.0 : 4/2/05 : Added download button in filelist.cgi # # Need Archive::Zip # # $Id: flist2.cgi,v 1.2 2005/09/25 04:41:34 Hideki Kanayama Exp $ use Archive::Zip; use CGI::Carp fatalsToBrowser; use Cwd; $script="flist2.cgi"; $version = "2.0"; $updatedyear = "2005"; # Directory name to be displayed $dldir = "files"; # Temporary file name and a directory to store it $prefix = 'flist'; $zipfile = "$prefix$$.zip"; $zipdir = cwd(); # Expiration time(minutes) to delete temporary .zip files in the directory of $zipdir $expire = 60; # Title $title = 'filelist'; &error("No directory $dldir") if (! -d $dldir); &error("No directory $zipdir") if (! -d $zipdir); opendir(DLDIR, "$dldir") or &error("Cannot open direcotry $dldir"); @filelist = grep !/^\./, readdir DLDIR; closedir(DLDIR); %in = &parsedata; if ($in{mode} eq 'download'){ &makezip; } else { &display; } exit; sub makezip { my $zip = Archive::Zip->new(); my $member; chdir($dldir); my $i=0; my $eachfile; foreach (keys(%in)){ if ($in{$_} eq 'on'){ next if ($_ eq allon || $_ eq alloff); /check_(\d\d*)/; $eachfile = $filelist[$1]; $member = $zip->addFile("$eachfile"); } } my $status = $zip->writeToFileNamed("$zipfile"); if ($status != AZ_OK) { unlink("$zipfile") if (-e "$zipfile"); &error("Cannot create $zipfile") } rename "$zipfile", "$zipdir/$zipfile"; chdir($zipdir); print "Location: $zipfile\n\n"; } sub display { opendir(ZIPDIR, "$zipdir") or &error("Cannot open directory $zipdir"); @ziplist = grep /^$prefix.*\.zip$/, readdir ZIPDIR; closedir(ZIPDIR); my $zipfile; my $now = time; foreach $zipfile (@ziplist){ ($d_dev,$d_ino,$d_mode,$d_nlink,$d_uid,$d_gid,$d_rdev,$d_size,$d_atime,$d_mtime,$d_ctime,$d_blksize,$d_blocks)=stat("$zipdir/$zipfile"); if ($now > $d_mtime + $expire * 60){ unlink("$zipdir/$zipfile"); } } print "Content-Type: text/html\n\n"; &beginning; print qq|
\n"; &ending; } sub beginning { print ""; print <