#!/usr/local/bin/perl ################################################################################ # 高機能アクセス解析CGI Standard版専用 過去ログファイル圧縮CGI # Copyright(C) sue445 # http://www.sue445.biz/ # # accの既存のログファイルをgzip圧縮します # お使いのサーバでgzipの命令が対応しているかどうか事前にお確かめください # 自分用(xrea用)に最適化されているので、もし別のサーバで使えなければ適当に # 書き換えてください(^^; # 改善・改悪等はご自由にどうぞ # # 使い方 # 1.拡張子をtxtからcgiに書き換える # 2.下の設定箇所を自分の環境に応じて書き換える # 3.本CGIをacc.cgiと同じ場所にアスキーモードで転送する #   (パーミッションはacc.cgiと同じ704か705辺り) # 4.CGIを実行する # # 注意! #  このCGIはaccconfig.cgiの「■ログのローテーション設定」で「1:ログサイズで # ローテーション」に設定している人だけ実行してください! # 「0:ローテーションしない」はそもそも過去ログがないので圧縮する意味はないですし、 # 「2:日ごとにローテーション」や「3:月ごとにローテーション」だと # 現行のログも圧縮されてしまっていろいろと面倒な事になってしまいます # # あと、gzip圧縮すると元のファイルは無くなります。もし失敗してもいいように # ローカルに保存しておくなりしてバックアップをとっておくことをおすすめします ############################################################################### #-------------------------------------------------------------------- # 設定箇所(基本的にはaccconfig.cgiと同じ) #-------------------------------------------------------------------- #■アクセスログ # このCGIからの相対パスで記述してください。 #-------------------------------------------------------------------- $LOG = './logs_sue445/access_log'; #-------------------------------------------------------------------- #■gzipプログラムの場所 # もしこれで動かない場合はお使いのサーバに問い合わせるか # which gzipとかで探してください #-------------------------------------------------------------------- $GZIP = '/bin/gzip'; # 過去ログリストを取得する my %LogList = &GetPastLogList; print "Content-type: text/html; charset=Shift_JIS\n"; print "\n"; print "\n"; print "\n"; print "Start

\n"; # ログを圧縮する $success_file = $failed_file = 0; for $key (sort(keys(%LogList))) { $file = "$LogList{$key}"; print "$key
\n"; print "$LogList{$key}
\n"; system($GZIP, $LogList{$key}); print "
\n"; } print "End
\n"; print "\n"; print "\n"; exit; # 以下はacc.cgiからの流用 m(_ _)m sub GetPastLogList { my %LogList = (); my $LogDir = $LOG; $LogDir =~ s/\/([^\/]*)$//; my $LogFileName = $1; unless($LogDir) {$LogDir = '.';} opendir(LOGDIR, "$LogDir") || &ErrorPrint("ログ格納ディレクトリ「$LogDir」をオープンできませんでした。"); my @FileList = readdir(LOGDIR); for $key (@FileList) { # 未圧縮の過去ログ(access_log.cgi.YYYYMMDD.cgi)しか検索しません # ひょっとしたら正規表現でもっといい方法があるんだろうけど分かりませんw if($key =~ /^$LogFileName.cgi.([0-9]+).cgi.gz/){ } elsif($key =~ /^$LogFileName.cgi.([0-9]+).cgi/){ $LogList{$key} = "$LogDir\/$key"; } } return %LogList; } sub ErrorPrint { local($message) = @_; print "Content-type: text/html; charset=Shift_JIS\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "$message\n"; print "
\n"; print "\n"; print "\n"; exit; }