mod_uploader は,よくあるアップローダを Apache のモジュールとして実 装したものです.以下のような特長があります.
mod_uploader は,UNIX 系 OS で動作します.( Windows 版はこちら)
開発は, Gentoo Linux Kernel 2.6.20 ,GCC 3.4.5 ,Apache 2.0.58 ,ImageMagick 6.3.3 で行っています.
下記のようにすることで check out できます.(パスワードは空)
$ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader login $ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader checkout -P mod_uploader
また, ViewCVS 経由で参照 することもできます.
コンパイルの前に, 各環境で必要になる主なパッケージ に書かれているパッ ケージがインストールされていることを確認してください.
GNU Compiler Collection でコンパイルする場合は,
$ ./configure $ make
とします. Intel C++ Compiler でコンパイルする場合は,
$ env CC=icc ./configure $ make
とします.
configure は次のオプションを受け付けます.エラーがでた場合は, --with-apxs , --with-apctl2 や --with-aprconf を試してみてく ださい.
$ ./configure $ make
$ ./configure $ gmake
$ ./configure $ env MACOSX_DEPLOYMENT_TARGET=10.4 make
必要なライブラリがインストールされていないのが原因です.cannot find -l xxx というエラーの場合,lib xxx がインストールされていません.通常, これらのライブラリは,パッケージ管理システムが依存関係に基づいて自動的 にインストールされるものですが,何らかの事情によりうまくインストールさ れなかった場合このエラーが発生します.
ライブラリを手動でインストールすることでエラーを解決できます.例えば cannot find -lgs というエラーの場合,Ghostscript をインストールします. CentOS/FedoraCore の場合,下記のようにします.
$ su # yum install ghostscript
設定は,Apache の設定ファイル( .htaccess は不可)に,以下のように記 述します.( * 印がついているものは必須)
<Location アップローダを設置する場所> SetHandler uploader UploaderBaseUrl アップローダの URL * UploaderDataDirectory データを保存するフォルダ * UploaderFileDirectory ファイルを保存するフォルダ * UploaderThumbDirectory サムネイルを保存するフォルダ * UploaderTempDirectory 一時ファイルを保存するフォルダ * UploaderTotalFileSizeLimit ファイルサイズの合計の上限 (KB) UploaderTotalFileNumberLimit ファイルの個数の上限 UploaderFileSizeLimit 一回にアップロードできるファイルの最大サイズ (KB) UploaderPerPageItemNumber 1 ページあたりに表示するアイテム数 UploaderIndexViewTemplate トップページのテンプレート * UploaderInfoViewTemplate アップロード完了通知ページのテンプレート * UploaderProgressViewTemplate アップロード進捗ページのテンプレート * UploaderDownloadViewTemplate ダウンロードページのテンプレート * UploaderThumbnailViewTemplate サムネイルページのテンプレート * UploaderAdminViewTemplate 管理ページのテンプレート * UploaderErrorViewTemplate エラーページのテンプレート * </Location> <Location アップローダを設置する場所/admin> Order Deny,Allow Deny From All Allow From 127.0.0.1 </Location>
テンプレートは,tmpl ディレクトリに入っている index.htm , info.htm , progress.htm , download.htm , thumbnail.htm , admin.htm , error.htm を利用してください.
http://foo/up/ に設置する場合の設定例は以下のようになります. /up_img , /up_css , /up_js の Alias は必須ではありません.テン プレートを書き換えたくない場合に指定してください.(これはあくまでも例 です.ディレクトリやファイルのパスは環境よって違ってきます)
<Location /up> SetHandler uploader UploaderBaseUrl "http://foo/up" UploaderDataDirectory "/path/to/mod_uploader/test/data" UploaderFileDirectory "/path/to/mod_uploader/test/file" UploaderThumbDirectory "/path/to/mod_uploader/test/thumb" UploaderTempDirectory "/path/to/mod_uploader/test/temp" UploaderTotalFileSizeLimit 10485760 UploaderTotalFileNumberLimit 200 UploaderFileSizeLimit 1048576 UploaderPerPageItemNumber 30 UploaderIndexViewTemplate "/path/to/mod_uploader/tmpl/index.htm" UploaderInfoViewTemplate "/path/to/mod_uploader/tmpl/info.htm" UploaderProgressViewTemplate "/path/to/mod_uploader/tmpl/progress.htm" UploaderDownloadViewTemplate "/path/to/mod_uploader/tmpl/download.htm" UploaderThumbnailViewTemplate "/path/to/mod_uploader/tmpl/thumbnail.htm" UploaderAdminViewTemplate "/path/to/mod_uploader/tmpl/admin.htm" UploaderErrorViewTemplate "/path/to/mod_uploader/tmpl/error.htm" </Location> <Location /up/admin> Order Deny,Allow Deny From All Allow From 127.0.0.1 </Location> Alias /up_img "/path/to/mod_uploader/img" Alias /up_css "/path/to/mod_uploader/css" Alias /up_js "/path/to/mod_uploader/js"
Apache を普通に起動すれば OK です.設置した場所にブラウザでアクセス してみましょう.
Apache のエラーログにエラー内容が出力されているので,内容を確認して設定 を見直してください.
UploaderBaseUrl と違うアドレスでアップローダにアクセスした場合に発生し ます.例えば,UploaderBaseUrl では http://localhost/up と指定している のに,ブラウザでは http://127.0.0.1/up にアクセスしている場合がこれに 該当します.
UploaderBaseUrl で指定したアドレスでアクセスしてください.
mod_uploader は,高速動作のため,ダウンロードカウンタのカウントアップを メモリ上でのみ行っており,Apache の終了時にデータをファイルに書き出すよ うになっています.そのため,Apache が正常に終了しなかった場合,ファイル への書き出しが行われずダウンロードカウンタが以前の状態にリセットされて しまいます.
次のコマンドを入力して,http://localhost:8080/up/ にアクセスすることで することでインストールせずに動作を確認できます.
他のホストからアクセスする場合は, localhost の部分を適当に置き換えて ください.
$ su - # make -f GNUmakefile.apache start
もし, LoadModule 関連のエラーが出た場合は,conf/apache.conf を適宜修 正してください.
停止は,次のようにします.
# make -f GNUmakefile.apache stop
mod_uploader はファイルのアップロード時に環境変数 uploader_upload を 定義するので,以下の様な設定を追加することで投稿者の IP アドレスをログ に記録する事が出来ます.
LogFormat "%t HOST: %h ID: %{uploader_item_id}e AGENT: %{User-agent}i" uploader CustomLog log/apache.upload_log uploader env=uploader_upload
uploader_item_id は,ファイルの ID に展開されます.その他の書式について は, mod_log_config のドキュメント を参照 してください.
なお,ファイルのダウンロード時と削除時にも,環境変数 uploader_download , uploader_remove を定義するので,同様の方法でロ グをとることが可能です.
mod_rewrite というモジュールと組み合わせることでファイルの直リンクを禁 止することが可能です.以下のような設定を追加します. http://columbia:8080/up/ はアップローダを設置した URL に書き換えてく ださい.
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://columbia:8080/up/ [NC] RewriteRule . - [F]
また,単純にアクセスを禁止するだけでなく,直リンクされた場合に特定の URL に飛ばしたい場合は,以下のような設定を追加します. http://www.yahoo.co.jp/ は飛ばしたい URL です.
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://columbia:8080/up/ [NC] RewriteRule ^.*$ http://www.yahoo.co.jp/
なお,これらの設定を追加することで Apache が起動しなくなった場合,お使 いの環境で mod_rewrite が利用できないことが原因と考えられます.ます, mod_rewrite を使えるようにしてください.
mod_uploader は,表示を非常に高速に行うことができます.
右に他のアップローダとの速度比較を示します.HTML は,表示を静的な HTML で行うもの,Perl および PHP はそれぞれの言語で作られたアップローダを指 しています.測定には ApacheBench を用い,5 並列で 10,000 リクエスト発行 した場合の値をプロットしました.
mod_uploader は Perl の約 100 倍,PHP の約 10 倍高速に動作しています. これらの言語を使った場合, mod_perl (ModPerl::Registry)や APC を使用すればある程度速度を改善することが可能です.それでも, mod_uploader には及びません.
また,mod_uploader は,静的な HTML を用いるものと比べてもわずかながら高 速に動作します.これは,表示に静的な HTML を用いる場合でも,アップロー ド処理のためには libphp4.so をロードする必要があるので,そのためのオー バーヘッドがかかっているのが原因と思われます.libphp4.so のロードを無く した場合,HTML の値は 2,800 を超えて最速になります.
mod_uploader は,巨大なファイルのアップロードにもわずかなメモリしか消費 しません.
それに対してアップローダの多くは,アップロードされたデータを一旦全てメ モリに入れて処理するため,アップロードにはファイルサイズに比例したサイ ズのメモリを消費してしまいます.
PayPal 経由での寄付を受け付けています.mod_uploader が気に入った場合は よろしくお願いします.いただいたお金は開発のための書籍購入などにあてさ せていただきます.
プログラムの作成にあたってお世話になった文献を紹介します.