#!/usr/local/bin/perl5 # # osldl.cgi # # 1999/01/12 Ver.0.01 # 1999/02/17 Ver.0.02 # 1999/02/21 Ver.0.03 # 1999/02/25 Ver.0.04 # 1999/02/26 Ver.0.05 # 1999/03/08 Ver.0.06 # $copyright ='osldl.cgi Ver.0.06 Copyright (C) 1999 gama'; # # (C) 1999 がま <gama@mvg.biglobe.ne.jp> # # gunzip の所在 (BIGLOBE) /usr/local/bin/gunzip # # gunzip による展開 gunzip -cd foo.gz & # # オプション -d 展開 # -c 出力先は stdout # # --------------------------------------------------------------------- require 'osl.env'; # --------------------------------------------------------------------- $LOCK_EX = 2; # 排他的にロック # --------------------------------------------------------------------- { $|=1; # ----------------------------------------------------------------- ($opt, $fileno, $filename) = split('&',$ENV{'QUERY_STRING'}); if (-e "$datadir$filename" ) { # .gz のないファイルの場合 print "Location: $datadir$filename\n\n"; } elsif (-e "$datadir$filename$gz" ) { # .gz の場合 if ( $filename =~ /\.(htm|html)$/i ) { print "Content-type: text/html\n"; } elsif ( $filename =~ /\.gif$/i ) { print "Content-type: image/gif\n"; } elsif ( $filename =~ /\.(jpg|jpeg)$/i ) { print "Content-type: image/jpeg\n"; } elsif ( $filename =~ /\.txt$/i ) { print "Content-type: text/plain\n"; } elsif ( $filename =~ /\.lzh$/i ) { print "Content-type: application/lzh\n"; } else { print "Content-type: application/octet-stream\n"; } print "Content-Disposition: inline; filename=$filename\n"; print "\n"; system("$gunzip $datadir$filename$gz &"); } else { print "Content-type: text/plain\n\n"; print "Error!\n$datadir$filename\n$datadir$filename$gz"; } if ($opt eq 'n') { # n : カウントしない。 exit; } # DL カウント ----------------------------------------------------- my($dlctr)=$infodir.'dl'.$fileno.'.dat'; open(DLCTR, "+<$dlctr"); flock(DLCTR, $LOCK_EX) if $useflock; # 排他ロック $dlctr=<DLCTR>+1; seek(DLCTR, 0, 0); printf(DLCTR "%d", $dlctr); close(DLCTR); }