apacheのURL Rewriting Engineを利用することによって、ファイルのダウンロード数をスマートにカウントします。
このスクリプトを使用するには、サーバでRewrite Engineが使える必要があります。
仕組みを簡単に説明します。
たとえば、ディレクトリ構成が以下のようで、自分の作品を公開しているディレクトリがpublic_html/sakuhin/であるとします。
public_html/
sakuhin/
sakuhin01.lzh
category/
sakuhin02.zip
cgi-bin/
dlcount/
dlcount.cgi
sonota/
ここで、sakuhin/sakuhin01.lzhへのアクセスがあった場合(誰かがダウンロードしようとした場合)に、cgi-bin/dlcount/dlcount.cgiに処理が移るように設定します。dlcount.cgiは、与えられた引数を元にログをとり、適切なファイルを出力します。こうすることによって、今までと同じURL(たとえば、http://uttsu.com/sakuhin/sakuhin01.lzh)のまま、ダウンロード数をカウントすることができます。
また、sakuhin/以下のサブディレクトリも有効にしておけば、sakuhin/category/sakuhin02.zipなどのsakuhin/以下にある指定拡張子のファイル全てのダウンロード数をカウントできます。サイトの管理者は、カウンターを意識する必要はまったくなく、訪問者はカウントされていることさえ気付かないでしょう。
以下のディレクトリ構成とファイル属性で設置します。
ファイル名 属性 説明
dlcount/ 755 ディレクトリ
dlcount.cgi 701 Download Counter本体
show.cgi 701 ログViewer
dat/ 自動的に作られます
count.dat 自動的に作られます
.htaccess dat/ディレクトリへのアクセスを禁止します
dat/ディレクトリに以下の内容の.htaccessを置くと、データファイルへの直接のアクセスを防げます。
order allow,deny deny from all
エディタでdlcount.cgiファイルを開き、以下の個所を編集します。
#!/usr/local/bin/perl
1行目はPerlのパスです。プロバイダなどによって異なります。以下である場合がほとんどです。
# カウントデータファイルを置くディレクトリ my $data_path = 'dat/';
最後に/を付けて指定します。
# カウントデータファイル my $data_file = 'count.dat';
カウント数が記録されるファイルです。$data_pathで指定したディレクトリの中に作られます。
# ダウンロードするファイルを置くディレクトリ my $file_path = '../../work/';
dlcount.cgiからの相対パス、または絶対パスで指定します。最後に/を付けて指定します。
ダウンロード用ファイルへのアクセスをdlcount.cgiに渡す設定をします。.htaccessファイルを置く場所は、ダウンロード用ファイルのディレクトリより上ならどこでも構いませんが、記述内容も調節する必要があります。
.htaccessの記述内容は少し難しいので、ここでは以下のディレクトリ構成であると仮定して説明します。
public_html/
sakuhin/
.htaccess
cgi-bin/
dlcount/
dlcount.cgi
public_html/sakuhin/はダウンロード用ファイルが入っているディレクトリです。このディレクトリの中に.htaccessを置くことにします。public_html/cgi-bin/dlcount/dlcount.cgiはDownload Counter本体です。
この場合.htaccessの内容は以下のようになります。
RewriteEngine on RewriteRule ^(.*\.(zip|lzh|exe))$ /cgi-bin/dlcount/dlcount.cgi?$1
拡張子がzip、lzh、exeのファイルの場合は、処理をdlcount.cgiに渡すように設定しています。
また、この場合、dlcount.cgiファイルの中の$file_pathの値は次のようになります。
# ダウンロードするファイルを置くディレクトリ my $file_path = '../../sakuhin/';
Download Counterで作られるデータファイルには、カウント数が保存されるファイル(count.dat)と、アクセスログが保存されるファイルの2種類があります。後者のファイル名は、ダウンロードされたファイルのパスやファイル名から決定されます。
count.datファイルには、ファイル名とカウント数が記録されます。ファイル名はダウンロード用ディレクトリからのパスを含みます。count.datのサンプルを示します。
cgi/fortune/fortune_100.lzh 16 cgi/dlcount/dlcount_100.lzh 12
個々のダウンロード用ファイルについて、ログファイルが作成されます。たとえばdlcount_100.lzhの場合はcgi_dlcount_dlcount_100.lzh.logのようなファイル名になります。ログファイルのサンプルを示します。
2002.10.17 15:16:56 ns.xxxx.ac.jp http://uttsu.com/work/cgi/dlcount/index.html 2002.10.18 22:43:11 i155133.ap.xxxx.or.jp http://uttsu.com/work/cgi/dlcount/index.html
ファイルのフォーマットは、年月日、時刻、ホスト名、リンク元となっています。
ブラウザからshow.cgiにアクセスすると、各ファイルのカウント数の一覧がごくシンプルに表示されます。また、個々のファイルのログを見る機能はまだありません。FTPなどでログファイルをダウンロードして見てください。
また、ログviewerを使う場合には、show.cgiファイル内の以下の個所でデータファイル名を指定してください。
# カウントデータファイル my $data_file = "dat/count.dat";
Download CounterではCGIによりダウンロードファイルを出力しています。このため、指定拡張子のファイルについては、.htaccessなどによるアクセス制限が効かなくなってしまいます。なので、ダウンロード用ディレクトリ(URL Rewritingで指定するディレクトリ)を限定するなどして利用してください。
ログファイルは自動的には消去されませんので、サイズが大きくなってきたら、必要に応じてローカルにバックアップをとったあと、ファイルサイズを調節してください。