uttsu.com > CGI/SSI >

Download Counter

目次

内容

 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の設定

 エディタで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からの相対パス、または絶対パスで指定します。最後に/を付けて指定します。

.htaccessの設定

 ダウンロード用ファイルへのアクセスを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ファイルには、ファイル名とカウント数が記録されます。ファイル名はダウンロード用ディレクトリからのパスを含みます。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

 ファイルのフォーマットは、年月日、時刻、ホスト名、リンク元となっています。

ログViewerについて

 ブラウザからshow.cgiにアクセスすると、各ファイルのカウント数の一覧がごくシンプルに表示されます。また、個々のファイルのログを見る機能はまだありません。FTPなどでログファイルをダウンロードして見てください。

 また、ログviewerを使う場合には、show.cgiファイル内の以下の個所でデータファイル名を指定してください。

# カウントデータファイル
my $data_file = "dat/count.dat";

注意事項

.htaccessが無効になる

 Download CounterではCGIによりダウンロードファイルを出力しています。このため、指定拡張子のファイルについては、.htaccessなどによるアクセス制限が効かなくなってしまいます。なので、ダウンロード用ディレクトリ(URL Rewritingで指定するディレクトリ)を限定するなどして利用してください。

ログファイルの容量について

 ログファイルは自動的には消去されませんので、サイズが大きくなってきたら、必要に応じてローカルにバックアップをとったあと、ファイルサイズを調節してください。


Copyright (C) Takashi Utsunomiya. All Rights Reserved.
2002.10.20掲載