#!/usr/local/bin/perl $www=""; $target="target=\"_nickyTool\""; #$lcolor="#c0c080"; $tcolor="#808040"; $lcolor="#e0e0e0"; $tcolor="#c0c0c0"; $bcolor="#c0c0c0"; sub open_year_dir() { my($dir)=@_[0]; my($dfh, $fname, @ydlist); $dfh=opendir(RDY, "./$dir"); @ydlist=readdir(RDY); close(RDY); for $fname( @ydlist ) { if( $fname !~ /^\.$|^\.\.$/ ) { @file_list[$file_num++]="./$dir/$fname"; } } } sub open_current_dir() { my($rfh, $dirname); opendir(RD,"./"); for $dirname( readdir(RD) ) { if( $dirname =~ /^[1-9][0-9][0-9][0-9]$/ ) { &open_year_dir($dirname); } } close(RD); } sub get_other_file() { my($fname); undef @other_list; $other_num=0; for $fname(@file_list) { if( $fname !~ /\.nky$|\.cmnt$/ ) { @other_list[$other_num++]=$fname; } } } sub get_nky_file() { my($fname); undef @nky_list; $nky_num=0; for $fname(@file_list) { if( $fname =~ /\.nky$|\.cmnt$/ ) { @nky_list[$nky_num++]=$fname; } } } sub get_NoLink() { my($fname, $fname_pch, @list, $oname, $flag); undef @nolink_list; $nolink_num=0; for $oname(@other_list) { $fname=&BaseName($oname); #pchファイルの場合は検索方法を変える必要がある if( $fname =~ /\.pch$|\.spch$/ ) { $fname =~ s/\.pch$|\.spch$//; } elsif( $fname =~ /\.thumb\./ ) { $fname =~ s/\.thumb\./\./; } open(RD, "grep -l $fname ./[1-9][0-9][0-9][0-9]/*.nky|"); if( ! ) { @nolink_list[$nolink_num++]=$oname; } close(RD); } } sub Delete_NoLink() { my($i, $j, $fsize); my($sec, $min, $wday, $yday, $dst, $year, $month, $day, $hour, $day, $temp); &get_nky_file(); &get_other_file(); &get_NoLink(); if( $#nolink_list >= 0) { print <削除したいファイルを選択してください


  1. 削除したいファイルの左にあるチェックボックスをクリックします。
  2. 削除したいファイルが決定したら、画面下にある『Delete File』ボタンをクリックします。
  • ここに表示されているファイルは全てnicky!で使われていないファイルです。
  • ファイルネームをクリックするとファイルを開きます。

Delete_NoLink_EOF print "
\n"; &put_HiddenPassWord(); print ""; print ""; print ""; print ""; print ""; print ""; for($i=0; $i<$nolink_num; ) { print ""; if( @nolink_list[$i] ) { print ""; print ""; print ""; } print ""; } print "
File NameSizeDate
"; print ""; if( @nolink_list[$i] =~ /\.pch$/ ) { print ""; } else { print ""; } print "@nolink_list[$i++]"; print ""; $fsize=(stat(@nolink_list[$i-1]))[7]; print $fsize."Byte"; print ""; ($sec,$min,$hour,$day,$month,$year,$wday,$yday,$dst)=localtime((stat(@nolink_list[$i-1]))[10]); $temp=sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year+1900, $month+1, $day, $hour, $min,$sec); print $temp; print "
"; print "
"; print ""; print ""; print "
\n"; print ""; } else { print "
リンクされていない画像はありません


"; &PutReturnMenu(); } } sub Delete_Junk_File() { my($i, $j); print <削除したいファイルを選択してください


  • 削除したいファイルの左にあるチェックボックスをクリックします。
  • ファイルネームをクリックするとファイルを開きます。
    画像ファイルは画像が表示され、pchファイルは再生します。
  • 削除したいファイルが決定したら、画面下にある『Delete File』ボタンをクリックします。

DeleteJunkFile_EOF &get_other_file(); print "
\n"; &put_HiddenPassWord(); print ""; for($i=0; $i<$other_num; ) { print ""; for($j=0;$j<3;$j++) { print ""; } print ""; } print "
"; if( @other_list[$i] ) { print ""; if( @other_list[$i] =~ /\.pch$/ ) { print ""; } else { print ""; } print "@other_list[$i++]"; } print "
"; print "
"; print ""; print ""; print "
\n"; print ""; } sub put_HiddenPassWord() { print ""; } sub check_PassWord() { my($pass)=@_[0]; my($key, $str); open(RD, "./NickyAdmin.cgi"); $str=; close(RD); if( $str eq crypt($pass, $ENV{SCRIPT_NAME}) ){ return 1; } $key=$ENV{REQUEST_URI}; if( $str eq crypt($pass, $key) ){ return 1; } $key =~ s/\+/ /g; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; if( $str eq crypt($pass, $key) ){ 1; }else{ 0; } } sub get_Value() { for $str(@_) { ($arg, $val)=split(/=/, $str); $val =~ s/\+/ /g; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; if( $arg eq "DeleteFile" ) { @delete_list[$delete_num++]=$val; } elsif( $arg eq "SelectMonth" ) { @month_list[$month_num++]=$val; } elsif( $arg eq "SelectArcFile" ) { @arcfile_list[$arcfile_num++]=$val; } else { ${$arg}=$val; } } } sub PutLogo() { print < nicky!Tools
Ver 2004/01/15

PUTLOGO_EOF } sub PutMenu() { ($pass)=@_[0]; print "
"; if( !$pass ) { print "

"; } else { &PutLogo(); &put_HiddenPassWord(); } print < 未使用ファイル削除 日記で使われていないファイルを削除します
アーカイブと削除 日記ファイルをアーカイブもしくは削除します
解凍とアーカイブファイル削除 アーカイブファイルの解凍や、アーカイブファイルの削除を行います

アーカイブ
 複数のファイルを1つのファイルにまとめること
PUTMENU_EOF } sub input_PassWord() { &PutLogo(); print <
INPUT_PASSWORD_EOF ; &PutMenu(0); } sub BaseName() { local($c); split(/\/|\\|\:/, $_[0]); for (@_) { $c = $_; } $c; } sub DeleteFileExec() { if( $delete_num ) { print "以下のファイルを削除しました。

"; for($i=0;$i<$delete_num;$i++) { print "@delete_list[$i]
\n"; unlink(@delete_list[$i]); } } else { print <
DeleteFileExec_EOF } print "
\n"; &put_HiddenPassWord(); print ""; print ""; print "
"; } #アーカイブ&削除実行 sub ArchiveDone() { my(@ymlist, $fname, $dust, $ly, $lm, $fn, $ay, $y, $m); my($arcname, @alist, $alist_num); $alist_num=0; undef @alist; &PutLogo(); if( $SelectArchive eq "Yes" ) { print "アーカイブ完了
"; print "
"; } print "
"; &get_nky_file(); @ymlist=sort @nky_list; for $fn( @month_list ) { $y=substr($fn, 0, 4); $m=substr($fn, 4, 2); $arcname=sprintf("nicky%04d%02d.nac", $y, $m); if( $SelectArchive eq "Yes" ) { open(WAC, ">$arcname"); binmode(WAC); @alist[$alist_num++]=$arcname; } for $fname( @ymlist ) { my(@st, $ctime, $fsize, $str, $df); ($dust, $ly, $fn) = split(/\//, $fname); $lm = substr($fn, 0, 2); #この条件に引っかかったファイルをアーカイブする if( ($y == $ly) && ($m == $lm) ) { @st=stat($fname); $ctime=@st[9]; $fsize=@st[7]; # print "$fname, $ctime, $fsize
"; if( $SelectArchive eq "Yes" ) { print WAC "$fname,$ctime,$fsize,"; } undef $str; open(RD, $fname); binmode(RD); while() { $str.=$_; } if( $SelectArchive eq "Yes" ) { print WAC $str; } close(RD); if( $SelectDelete eq "Yes" ) { unlink( $fname ); } if( $fname =~ /\.nky/ ) { my($d, $t, $ms, $gfname, $l, $c); my($pch); ($d,$t,$ms,$gfname,$l,$c)=split(/\x01/, $str); $df="\./$y/$gfname"; @st=stat($df); $fsize=@st[7]; if( ($gfname) && ($fsize) ) { $ctime=@st[9]; # print "$df, $ctime, $fsize
"; if( $SelectArchive eq "Yes" ) { print WAC "$df,$ctime,$fsize,"; } undef $str; if( $SelectArchive eq "Yes" ) { open(RD, $df); binmode(RD); while() { print WAC $_; } close(RD); } if( $SelectDelete eq "Yes" ) { unlink( $df ); } $pch=$gfname; $pch=~s/\..*$/\.pch/; $df="\./$y/$pch"; @st=stat($df); $fsize=@st[7]; if( $fsize ) { $ctime=@st[9]; # print "$df, $ctime, $fsize
"; if( $SelectArchive eq "Yes" ) { print WAC "$df,$ctime,$fsize,"; } undef $str; if( $SelectArchive eq "Yes" ) { open(RD, $df); binmode(RD); while() { print WAC $_; } close(RD); } if( $SelectDelete eq "Yes" ) { unlink( $df ); } } } } } } if( $SelectArchive eq "Yes" ) { close(WAC); } } print "
"; if( $alist_num ) { print "
"; print "下のリンクを右クリック→『対象をファイルに保存』→『ファイルの種類=全てのファイル』と操作してPCに保存してください
"; print "
"; for $fname(@alist) { print "$fname
"; } print "
"; print "
"; } elsif( $SelectDelete eq "Yes" ) { print "削除しました"; } print ""; &PutReturnMenu(); } sub ArchiveSelect() { my($i,$fn,$y, $m); print "
"; if( ($month_num == 0) || ($SelectArchive ne "Yes") && ($SelectDelete ne "Yes") ) { &PutLogo(); print "
アーカイブ/削除する月と『Archive』もしくは『Delete』を選択してください"; &PutReturnMenu(); print "
"; print ""; exit; } print "次のファイルを
"; if( $SelectArchive eq "Yes" ) { print "アーカイブし"; } if( $SelectDelete eq "Yes" ) { print "削除し"; } print "ます"; print "
"; print "
"; for $fn(@month_list) { $y=substr($fn, 0, 4); $m=substr($fn, 4, 2); print " "; print "$y年$m月
"; } print "
"; print ""; &put_HiddenPassWord(); print ""; print ""; print ""; print ""; } sub PutMonthTAG() { my($y, $m)=(@_[0], @_[1]); my($str); $str=sprintf("%04d%02d", $y, $m); print " "; print "$m月:$str
"; } sub ArchiveAndDelete() { my($fname); my(@ymlist); my($oy, $om, $ly, $lm, $fn, $dust); undef $oy, $om; &PutLogo(); &get_nky_file(); print "
"; if( $nky_num ) { print "削除またはアーカイブする月を選択してください
"; } else { print "日記ファイルがありません"; &PutReturnMenu(); print "
"; exit; } print "
"; print "\n"; @ymlist=sort @nky_list; for $fname( @ymlist ) { ($dust, $ly, $fn) = split(/\//, $fname); $lm = substr($fn, 0, 2); if( $ly != $oy ) { print "$ly年
"; &PutMonthTAG($ly, $lm); $oy=$ly; $om=$lm; } if( $lm != $om ) { &PutMonthTAG($ly, $lm); $om=$lm; } } print "
"; print "
"; print "  Archive"; print "  Delete"; print "

\n"; &put_HiddenPassWord(); print ""; print "
"; print ""; print ""; } sub unArchive() { my($fname); my($y, $m, $count, $str); &PutLogo(); print "
"; print "\n"; $count=0; undef $str; opendir(RD, "\./"); for $fname (readdir(RD)) { if( $fname =~ /^nicky[0-9][0-9][0-9][0-9][0-1][0-9]\.nac$/ ) { $y=substr($fname, 5, 4); $m=substr($fname, 9, 2); $str.="  $y年$m月 $fname
"; $count++; } } if( $count ) { print "月と解凍/削除を選択してください"; print "
"; print $str; } else { print "アーカイブファイルがありません。"; print "
"; &PutReturnMenu(); print "
"; exit; } print "
"; print "
"; print "
\n"; &put_HiddenPassWord(); print ""; print "  解凍 "; print "  アーカイブファイル削除"; print "

\n"; print ""; print "
"; print ""; print ""; } sub PutReturnMenu() { print "
"; print "\n"; &put_HiddenPassWord(); print ""; print ""; print "
"; } sub unArchiveFileSelect() { my($fname, $fn, $fsize, $atm, $count, $str1, $str2); &PutLogo(); if( !$arcfile_num ) { print "解凍する月を選択してください"; &PutReturnMenu(); print ""; exit; } if( ($ArchiveMonth ne "Yes") && ($ArchiveFileDelete ne "Yes") ) { print "解凍またはアーカイブファイル削除を選択してください"; &PutReturnMenu(); print ""; exit; } if( $ArchiveMonth eq "Yes" ) { print "解凍"; } if( $ArchiveFileDelete eq "Yes" ) { print " アーカイブファイル削除"; } print "
"; print "
"; print "
"; for $fname(@arcfile_list) { print "アーカイブファイル=[$fname]
"; if( $ArchiveMonth eq "Yes" ) { undef $str1; open(RD, $fname); binmode(RD); while() { $str1.=$_; } close(RD); while( ($fn, $atm, $fsize, $str1)=split(/,/, $str1, 4) ) { # print "filename=$fn, tm=$atm, size=$fsize
"; $str2=substr($str1, 0, $fsize); open(WD, ">$fn"); binmode(WD); print WD $str2; close(WD); utime $atm, $atm, $fn; $str1=substr($str1, $fsize); } } if( $ArchiveFileDelete eq "Yes" ) { unlink($fname); } } &PutReturnMenu(); print "
"; print ""; } #S.Kano print "Content-type: text/html\n\n"; $delete_num=0; undef @delete_list; $month_num=0; undef @month_list; split(/\?/, $ENV{'QUERY_STRING'}); &get_Value(@_); undef $a; while() { $a.=$_; } split(/&/, $a); &get_Value(@_); print < HTML_HEAD_EOF if( !&check_PassWord($PassWord) ) { &input_PassWord(); print ""; exit; } undef @file_list; $file_num=0; &open_current_dir(); if( $MODE eq "DeleteFileExec" ) { &DeleteFileExec(); } elsif( $MODE eq "DeleteFile" ) { &Delete_Junk_File(); } elsif( $MODE eq "DeleteNoLinkFile" ) { # ファイル選択 &Delete_NoLink(); } elsif( $MODE eq "Archive and Delete" ) { &ArchiveAndDelete(); } elsif( $MODE eq "unArchive" ) { &unArchive(); } elsif( $MODE eq "ArchiveSelect" ) { &ArchiveSelect(); } elsif( $MODE eq "ArchiveDone" ) { &ArchiveDone(); } elsif( $MODE eq "unArcFileSelect" ) { &unArchiveFileSelect(); } elsif( $MODE eq "PutMenu" ) { &PutMenu(1); } print "";