#! c:/perl/bin/perl # # lstdn.cgi # # 1.002 : 10/26/06 : zipファイル格納ディレクトリを指定できるように修正 # 1.001 : 10/25/06 : zipダウンロードページへ移動するオプションを追加 # 1.0 : 7/27/06 : Created # # Need Archive::Zip # # http://www.hidekik.com # # $Id: lstdn.cgi,v 1.6 2006/10/26 02:21:25 Hideki Kanayama Exp $ # Copyright(c) 2005-2006, Hideki Kanayama, All rights reserved. use Archive::Zip; use CGI::Carp qw(fatalsToBrowser); use Cwd; use File::Basename; use CGI qw(:cgi-lib); use strict; my $script= basename($0); my $version = "1.002"; my $updatedyear = "2006"; my $adminpwd = "adminpwd.dat"; my $lang = 0; my $charset = ('Shift_JIS', 'ISO-8859-1')[$lang]; my $prefix = 'flist'; my $zipfile = "$prefix$$.zip"; my $setupfile = "lstdn_setup.pl"; #### Environment setup from here #################### # リストファイル our $listfile = "listfile.lst"; # zipファイル格納ディレクトリ。CGIから見た相対パス。 our $zipdir = "."; # $zipdirにあるテンポラリ.zipファイルを削除するまでの時間(分) # Expiratoin time to delete zip files in the temporary file our $expire = 60; # タイトル # title our $title_en = 1; our $title = 'リストダウン'; our $title_color=""; our $title_size='+1'; our $title_face=''; # 1ページ表示行数 # number to be displayed in one page our $num_in_a_page = 20; # 戻るリンク # back link our $back_en = 1; our $back = ('戻る','Back')[$lang]; our $backlink = ".."; # 管理人リンク 0:off 1:on our $adminlink_en = 1; # background our $bgimage_en = 0; our $bgcolor = "#ffffff"; our $bgimagefile = ""; # 表\示幅 our $body_width = 100; # zipダウンロードページへ移動 1:有効 0:無効 our $goto_zippage = 0; #スタイルシート 1:on 0:off our $style_sheet_en = 0; our $style_sheet = 'A:link {text-decoration: none} A:visited {text-decoration: none} A:active {text-decoration: none} '; #
〜内に挿入できる構\文 1:on, 0:off our $head_insert_en = 0; our $head_insert = ''; #### Environment setup till here #################### require "$setupfile" if (-e "$setupfile"); my $q = new CGI; my $cgierror = $q->cgi_error; &error($cgierror) if ($cgierror); my %in = $q->Vars; if (! -e "$adminpwd"){ if ($in{mode} eq 'wradminpwd'){ &wradminpwd; } else { &setadminpwd; } } &error(("ディレクトリ$zipdirが存在しません","Cannot open directory:$zipdir")[$lang]) if (! -d $zipdir); # dir = 0, file = 1 # $filelist[number][dir][0] = title # $filelist[number][dir][1] = dir list # $filelist[number][file][0] = title # $filelist[number][file][1] = filename my @filelist; my @file_or_dir; my $i = 1; my $maxnum; if ($in{mode} eq '' or $in{mode} eq 'download'){ if (open (LIST, "< $listfile")) { while (管理人設定","Cannot open directory:$filedir")[$lang]); my @tmp = sort grep !/^\./, readdir DLDIR; closedir(DLDIR); foreach my $thisfile (@tmp) { next if (-d "$filedir/$thisfile"); $filelist[$i][0] = "$filetitle/$thisfile"; $filelist[$i][1] = "$filedir/$thisfile"; $i++; } } elsif (-f "$filedir"){ $filelist[$i][0] = "$filetitle"; $filelist[$i][1] = "$filedir"; $i++; } else { &error(("ディレクトリ、またはファイル$filedirが存在しません。リストファイルを修正してください。
管理人設定","Cannot open directory or file:$filedir")[$lang]); } } # unshift(@filelist,'dummy'); close(LIST); } $maxnum = $i - 1; } if ($in{mode} eq 'setup'){ &setupform; } elsif ($in{mode} eq 'makesetup'){ &makesetup; } elsif ($in{mode} eq 'listfileform'){ &listfileform; } elsif ($in{mode} eq 'makelistfile'){ &makelistfile; } elsif ($in{mode} eq 'download'){ &makezip; } else { &display; } exit; sub makezip { my $zip = Archive::Zip->new(); my $member; my $i=0; my $eachfile; my $newfile; foreach (keys(%in)){ if ($in{$_} eq 'on'){ next if ($_ eq 'allon' || $_ eq 'alloff'); /check_(\d\d*)/; $eachfile = $filelist[$1][1]; $newfile = basename($eachfile); $member = $zip->addFile("$eachfile","$newfile"); } } my $status = $zip->writeToFileNamed("$zipfile"); if ($status != 'AZ_OK') { unlink("$zipfile") if (-e "$zipfile"); &error(("$zipfileが作成されません","Cannot create $zipfile")[$lang]) } rename "$zipfile", "$zipdir/$zipfile"; if ($goto_zippage){ &zippage($zipfile); } else { print "Location: $zipdir/$zipfile\n\n"; } } sub display { opendir(ZIPDIR, "$zipdir") or &error(("ディレクトリ$zipdirが開けません","Cannot open $zipdir")[$lang]); my @ziplist = grep /^$prefix.*\.zip$/, readdir ZIPDIR; closedir(ZIPDIR); my $zipfile; my $now = time; my ($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); 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"); } } my $from; if (! exists $in{from}) { $from = 1; } else { $from = $in{from}; } my $to; if (! exists $in{to}){ $to = $num_in_a_page; } else { $to = $in{to}; } &beginning($from,$to); print qq(
| \n";
}
sub ending {
my $mysite = ('http://www.hidekik.com/','http://www.hidekik.com/en/')[$lang];
print qq| lstdn.cgi Ver. $version \n|;
print "Copyright(c) 2005-$updatedyear, hidekik.com |