#!/usr/bin/perl #****************************************************************************** #dlcount.cgi - Download Counter Ver.1.11 # #Version :1.11 #modified :2000/12/05 #Copyright :The Room #E-Mail :dream@lib.net #URL :http://exdreams.net/room/ # #これはフリー素材です。 #転載・商用目的の利用の際には、メールをお願いします。 # #****************************************************************************** #1行目のperlのディレクトリ指定は、サーバによって異なります。 #詳しくは、管理者にお聞きください。 #****************************************************************************** $jcode='./jcode.pl'; #jcode.plの位置 $bar = './bar.gif'; #グラフ用画像の場所 $datafile = './data.dat';#データファイルの場所 $adminpass = 'munitoji'; #管理用パスワード $back1='#b0b0ff'; #ランキング表示の背景色(「ランク」部分) $back2='#c0c0ff'; #「名前」部分背景色 $back3='#d0d0ff'; #グラフ部分背景色 $back4='#e0e0ff'; #カウント部分背景色 $back5='#f0f0ff'; #割合部分背景色 $barwidth=200; #グラフの最大幅 $barheight=10; #グラフ画像の高さ $downloadpath='http://www.komainu.info/site/main/lib/exe/fetch.php?media=archive:';#DL基幹ディレクトリ $scriptpath='http://www.komainu.info/site/cgi/dlcount/dlcount.cgi';#スクリプト自体のURL $home ='';#ホームページURL(設定すると「戻る」のリンクが表示されます。) #****************************************************************************** require $jcode; #データ受け取り $cl = $ENV{"CONTENT_LENGTH"}; if( $cl > 0 ){ read(STDIN, $qs, $cl ); }else{ $qs = $ENV{"QUERY_STRING"}; } @contents = split(/&/,$qs); foreach $i (0 .. $#contents) { local($key,$text)= split(/=/,$contents[$i]); $text =~ s/\+/ /g; $text =~ s/%(..)/pack("c",hex($1))/ge; $text =~ s/\r\n/\n/g; $text =~ s/\n//g; &jcode'convert(*text,'sjis'); $act = $text if $key eq 'act'; $filenum = $text if $key eq 'f'; $pass = $text if $key eq 'pass'; $sel = $text if $key eq 'sel'; $send[$1] = $text if $key =~ /send(\d+)/; } if ($filenum != ""){&download;} elsif ($act eq ""){&ranking;} if ($pass ne $adminpass){&error("パスワードが間違っています。");} if ($act eq "ad_menu"){&ad_menu;} elsif ($act eq "ad_add_r1"){&ad_add_r1;} elsif ($act eq "ad_add_r2"){&ad_add_r2;} elsif ($act eq "ad_chg_r1"){&ad_chg_r1;} elsif ($act eq "ad_chg_r2"){&ad_chg_r2;} elsif ($act eq "ad_del_r1"){&ad_del_r1;} elsif ($act eq "ad_del_r2"){&ad_del_r2;} elsif ($act eq "ad_add_l1"){&ad_add_l1;} elsif ($act eq "ad_add_l2"){&ad_add_l2;} elsif ($act eq "ad_chg_l1"){&ad_chg_l1;} elsif ($act eq "ad_chg_l2"){&ad_chg_l2;} elsif ($act eq "ad_del_l1"){&ad_del_l1;} elsif ($act eq "ad_del_l2"){&ad_del_l2;} exit; #****************************************************************************** sub ad_del_l2{ #リーフ削除 my (@y1,@y2); @y2=split(/\_/,(split(/<>/,$sel))[0]); open (IO,"+<$datafile"); eval{flock(IO,2)}; while(){ push(@y1,$_) if $_ !~ /^$y2[0]<>$y2[1]<>/; } truncate(IO,0); seek(IO,0,0); print IO @y1; close (IO); &hphead; print < リーフの削除が完了しました。

EOD &hpfoot; } #****************************************************************************** sub ad_del_l1{ #リーフ削除 my (@y2,@y3,@y4); @y2=split(/<>/,$sel); @y4=split(/\_/,$y2[0]); if ($y2[3] ne "2"){&error("リーフを選択してください。");} open (IN,"$datafile"); eval{flock(IN,1)}; while(){ if ($_ =~ /^$y4[0]<>$y4[1]<>/){ @y3=split(/<>/,$_); last; } } close(IN); &hphead; print < リーフの削除を行います。
ルート 題名 $y2[1]
リーフ DLファイルURL $downloadpath$y3[3]
カウント $y3[5]
EOD &hpfoot; } #****************************************************************************** sub ad_chg_l2{ #リーフ変更 my @y0=split(/<>/,$sel); my (@y1,@y2); $send[4]||=0; if ($send[2] eq ""){&error("リーフのダウンロードファイルURLを入力してください。");} if ($send[4] =~ /[^\d]/){&error("リーフの初期カウントに数字以外の文字が含まれています。");} open (IO,"+<$datafile"); eval{flock(IO,2)}; while(){ @y2=split(/<>/,$_); if ("$y2[0]\_$y2[1]" eq $y0[0]){ push(@y1,"$y2[0]<>$y2[1]<>$y2[2]<>$send[2]<>$y2[4]<>$send[4]<>\n"); } elsif ($y2[3] eq $send[2]){ close (IO); &error("入力されたリーフのダウンロードファイルURLは、既に設定されています。"); }else{ push(@y1,$_); } } truncate(IO,0); seek(IO,0,0); print IO @y1; close (IO); &hphead; print < リーフの変更が完了しました。

EOD &hpfoot; } #****************************************************************************** sub ad_chg_l1{ #リーフ変更 my @y3; my @y2=split(/<>/,$sel); my @y4=split(/\_/,$y2[0]); if ($y2[3] ne "2"){&error("リーフを選択してください。");} open (IN,"$datafile"); eval{flock(IN,1)}; while(){ if ($_ =~ /^$y4[0]<>$y4[1]<>/){ @y3=split(/<>/,$_); last; } } close(IN); &hphead; print < リーフの変更を行います。
ルート ファイルの題名 $y3[2]
参照 $y3[4]
リーフ DLファイルURL $downloadpath
カウント
EOD &hpfoot; } #****************************************************************************** sub ad_add_l2{ #リーフ追加 my @y0=split(/<>/,$sel); my $a1=0; my $a2=2; my (@y1,@y2); $send[4]||=0; if ($send[2] eq ""){&error("リーフのダウンロードファイルURLを入力してください。");} if ($send[4] =~ /[^\d]/){&error("リーフの初期カウントに数字以外の文字が含まれています。");} open (IO,"+<$datafile"); eval{flock(IO,2)}; while(){ @y2=split(/<>/,$_); if (($y2[0] == $y0[0]) && ($a1 !=2)){ $a1=1; $a2=$y2[1]+1; } if (($a1 == 1) && ($y2[0] != $y0[0])){ push(@y1,"$y0[0]<>$a2<>$y0[1]<>$send[2]<>$y0[2]<>$send[4]<>\n"); $a1=2; } if ($y2[3] eq $send[2]){ close (IO); &error("入力されたリーフのダウンロードファイルURLは、既に設定されています。"); } push(@y1,$_); } if ($a1 == 1){ push(@y1,"$y0[0]<>$a2<>$y0[1]<>$send[2]<>$y0[2]<>$send[4]<>\n"); } truncate(IO,0); seek(IO,0,0); print IO @y1; close (IO); &hphead; print < リーフの追加が完了しました。

今設定したファイルをダウンロードするには、

<a href="$scriptpath\?f=$y0[0]\_$a2">ダウンロード</a>

このようにリンクを貼\ってください。

こちらをクリックしてダウンロードされるかを確認してください。

EOD &hpfoot; } #****************************************************************************** sub ad_add_l1{ #リーフ追加 my @y2=split(/<>/,$sel); if ($y2[3] ne "1"){&error("ルートを選択してください。");} &hphead; print < リーフの追加を行います。
ルート ファイルの題名 $y2[1]
参照 $y2[2]
リーフ DLファイルURL $downloadpath
初期カウント
EOD &hpfoot; } #****************************************************************************** sub ad_del_r2{ #ルート削除 my $a1=(split(/<>/,$sel))[0]; my @y1; open (IO,"+<$datafile"); eval{flock(IO,2)}; while(){ push(@y1,$_) if $_ !~ /^$a1/; } truncate(IO,0); seek(IO,0,0); print IO @y1; close (IO); &hphead; print < ルートの削除が完了しました。

EOD &hpfoot; } #****************************************************************************** sub ad_del_r1{ #ルート削除 my @y2=split(/<>/,$sel); if ($y2[3] ne "1"){&error("ルートを選択してください。");} &hphead; print < ルートの削除を行います。
題名 $y2[1]

EOD &hpfoot; } #****************************************************************************** sub ad_chg_r2{ #ルート変更 if ($send[1] eq ""){&error("新題名を入力してください。");} if (($send[2] ne "") && ($send[2] !~ /^https?:\/\/[\w|\:\@\-]+\.[\w|\:\!\#\%\=\&\-\|\@\~\+\.\?\/]+$/i)){&error("ルートの参照URLが不正です。");} my $a1=(split(/<>/,$sel))[0]; my (@y1,@y2); open (IO,"+<$datafile"); eval{flock(IO,2)}; while(){ if ($_ =~ /^$a1<>/){ @y2=split(/<>/,$_); push(@y1,"$y2[0]<>$y2[1]<>$send[1]<>$y2[3]<>$send[2]<>$y2[5]<>\n"); }else{ push(@y1,$_); } } truncate(IO,0); seek(IO,0,0); print IO @y1; close (IO); &hphead; print < ルートの変更が完了しました。

EOD &hpfoot; } #****************************************************************************** sub ad_chg_r1{ #ルート変更 my @y2=split(/<>/,$sel); if ($y2[3] ne "1"){&error("ルートを選択してください。");} &hphead; print < ルートの変更を行います。
題名
参照URL

EOD &hpfoot; } #****************************************************************************** sub ad_add_r2{ #ルート追加 my (@y2,$a1); $send[4]||=0; if ($send[1] eq ""){$send[1] = $send[2];} if ($send[2] eq ""){&error("リーフのダウンロードファイルURLを入力してください。");} if (($send[3] ne "") && ($send[3] !~ /^https?:\/\/[\w|\:\@\-]+\.[\w|\:\!\#\%\=\&\-\|\@\~\+\.\?\/]+$/i)){&error("ルートの参照URLが不正です。");} if ($send[4] =~ /[^\d]/){&error("リーフの初期カウントに数字以外の文字が含まれています。");} $a1=""; open (IO,"+<$datafile"); eval{flock(IO,2)}; while(){ @y2=split(/<>/,$_); if ($y2[0] >= $a1){ $a1=$y2[0]+1; } if ($y2[3] eq $send[2]){ close (IO); &error("入力されたリーフのダウンロードファイルURLは、既に設定されています。"); } } if ($a1 eq ""){$a1=1;} seek(IO,0,2); print IO "$a1<>1<>$send[1]<>$send[2]<>$send[3]<>$send[4]<>\n"; close (IO); &hphead; print < ルートの追加が完了しました。

今設定したファイルをダウンロードするには、

<a href="$scriptpath\?f=$a1\_1">ダウンロード</a>

このようにリンクを貼\ってください。

こちらをクリックしてダウンロードされるかを確認してください。

EOD &hpfoot; } #****************************************************************************** sub ad_add_r1{ #ルート追加 &hphead; print <ルートの追加を行います。
ルート ファイルの題名
参照URL
リーフ DLファイルURL $downloadpath
初期カウント
EOD &hpfoot; } #****************************************************************************** sub ad_menu{ #管理:メニュー表示準備 my (@y1,@y2,$data1,$a1); open (IN,"$datafile"); eval{flock(IN,1)}; @y1=; close (IN); &hphead; print <BaseUrl : $downloadpath
EOD #ランキングテーブル設定・説明表示 print < EOD $a1=" checked"; foreach(@y1){ @y2=split(/<>/,$_); if ($data1{$y2[2]} == 0){ $data1{$y2[2]}=1; print ""; print ""; print ""; print ""; }else{ print ""; } print ""; print ""; print ""; print ""; print ""; $a1=""; } print <
EOD &hpfoot; } #****************************************************************************** sub download{ #ダウンロード ($f1,$f2)=split(/\_/,$filenum); $f2||=1; $flag = 1; open (IO,"+<$datafile"); flock(IO,2); @y1=; for (0 .. $#y1){ if ($y1[$_] =~ /^$f1<>$f2<>/){ @y2=split(/<>/,$y1[$_]); $y2[5]++; $y1[$_]="$y2[0]<>$y2[1]<>$y2[2]<>$y2[3]<>$y2[4]<>$y2[5]<>\n"; $flag=0; last; } } if ($flag){ close (IO); &error("指定されたファイルは設定されていません。"); } truncate(IO,0); seek(IO,0,0); print IO @y1; close (IO); print "Location: $downloadpath$y2[3]\n\n"; exit; } #****************************************************************************** sub error{ #エラー表示 &hphead; print <
ルート 題名 参照URL リーフ 番号 DLURL カウント
$y2[2]<>$y2[4]<>1\"$a1>$y2[2]$y2[4]
   $y2[2]<>$y2[3]<>2\">$y2[0]\_$y2[1]$y2[3]$y2[5]


$_[0]

ブラウザのボタンで前のページに戻ってください。




EOD &hpfoot; } #****************************************************************************** sub hphead{ #ヘッダ設定 print "Content-type:text/html; charset=shift_jis\n\n"; print < Download Counter Ver.1.11
Download Counter Ver.1.11

EOD } #****************************************************************************** sub hpfoot{ #フッタ設定 # #著作権表示を消すことを禁じます。 print <Download Counter by The Room
EOD exit; } #****************************************************************************** #これ以降のルーチンで、ダウンロードランキングの表示を行っています。 #****************************************************************************** sub ranking{ #ランキング表示 my (@y2,@y3,%data1,$a1,$a2,$a3,$maillg,$nowlg); my $bfcount=-1; my $addcount=1; my $ct = 0; open (IN,"$datafile"); eval{flock(IN,1)}; while (){ @y2=split(/<>/,$_); $data1{"$y2[2]<>$y2[4]"}+=$y2[5]; $allct+=$y2[5]; } close (IN); #------------------------------------------------------------------------------ #ヘッダ表示 print "Content-type:text/html; charset=Shift-JIS\n\n"; print < Download Counter Ver.1.11
Download Counter Ver.1.11

EOD #------------------------------------------------------------------------------ #ランキングテーブル設定・説明表示 print < 総ダウンロード数 $allct ランク 名前   カウント 割合 EOD #------------------------------------------------------------------------------ if ($allct != 0){ foreach $a1 (sort {$data1{$b} <=> $data1{$a}} keys %data1){ if ($data1{$a1} != 0){ $a2 = int($data1{$a1}/$allct*100*10)/10; }else{ $a2 = 0; } $mainlg||=$a2; $nowlg=int($a2/$mainlg*10*200)/10; if ($data1{$a1} != $bfcount){ $ct+=$addcount; $addcount=1; $bfcount=$data1{$a1}; }else{ $addcount++; } @y3=split(/<>/,$a1); if ($y3[1] ne ""){ $a3="$y3[0]"; }else{ $a3=$y3[0]; } #------------------------------------------------------------------------------ #ランキングデータ表示 # # $ct - 順位 # $a3 - 題名 # - グラフ # $data1{$a1} - カウント # $a2 - 割合 # print < $ct $a3 $data1{$a1} $a2% EOD #------------------------------------------------------------------------------ } } #ランキングテーブルタグとじ print ""; if ($home ne ""){ #「戻る」のリンク表示 print "


"; } #------------------------------------------------------------------------------ #フッタ表示 print <
EOD #------------------------------------------------------------------------------ exit; } #*****************************************************************************