mod_uploader は,よくあるアップローダを Apache のモジュールとして実装し たものです.以下のような特長があります.
lighttpd プラグイン版 や CGI 版 も存在し ます.
mod_uploader は,UNIX 系 OS 及び Windows で動作します.詳細を以下に示し ます.
開発は, Gentoo Linux kernel 2.6.10 ,GCC 3.3.5 ,Apache 2.0.54 ,ImageMagick 6.1.8.8 ,ffmpeg 0.4.9 で行っています.
下記のようにすることで check out できます.(パスワードは空)
$ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader login $ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader co mod_uploader
また, ViewCVS 経由で参照 することもできます.
GNU Compiler Collection でコンパイルする場合は,
$ ./configure $ make apache-module
とします. Intel C++ Compiler でコンパイルする場合は,
$ env CC=icc ./configure $ make apache-module
とします.
configure は次のオプションを受け付けます.エラーがでた場合 は, --with-apxs2 , --with-apctl2 , --with-aprconf や --enable-iconv-const を試してみてください.
$ ./configure $ make apache-module
$ ./configure --enable-iconv-const --with-libtool=/usr/local/bin/libtool15 $ gmake apache-module
$ ./configure --enable-iconv-const --disable-rwlock $ env MACOSX_DEPLOYMENT_TARGET=10.4 make apache-module
まず,UNIX 系 OS で configure します.
$ ./configure
次に,ディレクトリを丸ごと Windows にコピーし,src/GNUmakefile.apache.win32 の 次の部分を, Apache をインストールしたディレクトリおよび ImageMagick をインストールしたディレクトリに書き換えます.
APACHERDIR := C:/Server/Apache2 MAGICKDIR := C:/Application/Image/Edit/ImageMagick
以上が完了したら,src/GNUmakefile.apache.win32 を使って make します.
> cd src > vsvars32.bat > make -f GNUmakefile.apache.win32
vsvars32.bat は,コマンドラインから Visual C++ .NET を使うための環 境設定を行うスクリプトです. Visual C++ .NET をインストールしたディ レクトリ以下の Common7/Tools にあります.
コンパイル or ダウンロードした mod_uploader.so を Apache をインストー ルしたディレクトリ以下にある modules ディレクトリにコピーし, Apache の設定ファイル (httpd.conf) に
LoadModule uploader_module modules/mod_uploader.so
を追加します.
次に,環境変数 APR_ICONV_PATH に,Apache をインストールしたディレク トリ以下にある bin/iconv ディレクトリへのパスを指定します.これが正 常に行われていないと,「文字コードの変換を行うコンバータが存在しませ ん.」というエラーが発生します.
設定は,Apache の設定ファイル( .htaccess は不可)に,以下のように記 述します.( * 印がついているものは必須)
テンプレートは,tmpl/apache ディレクトリに入っている view.htm , progress.htm , download.htm , thumbnail.htm , error.htm を利 用してください.
<Location アップローダを設置する場所> SetHandler uploader Url アップローダの URL(RSS の生成に利用) FileDirectory アップロードファイルを保存するディレクトリ * ThumbDirectory サムネイル画像を保存するディレクトリ * TmpDirectory 一時ファイルを保存するディレクトリ * MaxFileSize 一回にアップロードできるファイルの最大サイズ(KB) TotalFileSizeLimit ファイルの合計サイズの上限値(KB) TotalFileNumberLimit ファイルの個数の上限値 PerPageItemNumber 1 ページあたりに表示するアイテム数 ViewTemplateFile トップページのテンプレートファイル * ProgressTemplateFile アップロード状況表示画面のテンプレートファイル * DownloadTemplateFile DL pass 入力画面のテンプレートファイル * ThumbTemplateFile サムネイルページのテンプレートファイル * ErrorTemplateFile エラーページのテンプレートファイル * </Location>
http://foo/up/ に設置する場合の設定例は以下のようになります. /img , /css や /thumb の Alias は必須ではありません.テンプレートを書き 換えたくない場合に指定してみてください.(これはあくまでも例です.ディ レクトリやファイルのパスは環境よって違ってきます)
<Location /up/> SetHandler uploader Url "http://foo/up/" FileDirectory "Z:/prog/Apache/Uploader/file" ThumbDirectory "Z:/prog/Apache/Uploader/thumb" TmpDirectory "Z:/prog/Apache/Uploader/tmp" MaxFileSize 1024 TotalFileSizeLimit 10240 TotalFileNumberLimit 1000 PerPageItemNumber 20 ViewTemplateFile "Z:/prog/Apache/Uploader/tmpl/apache/view.htm" ProgressTemplateFile "Z:/prog/Apache/Uploader/tmpl/apache/progress.htm" DownloadTemplateFile "Z:/prog/Apache/Uploader/tmpl/apache/download.htm" ThumbTemplateFile "Z:/prog/Apache/Uploader/tmpl/apache/thumbnail.htm" ErrorTemplateFile "Z:/prog/Apache/Uploader/tmpl/apache/error.htm" </Location> Alias /img "Z:/prog/Apache/Uploader/img" Alias /css "Z:/prog/Apache/Uploader/css" Alias /thumb "Z:/prog/Apache/Uploader/thumb"
Windows でサムネイル作成機能を使う場合,環境変数 PATH に, ImageMagick をインストールしたディレクトリ(CORE_RL_*.dll があるディ レクトリ)が含まれていることを確認してください.
UNIX 系 OS の場合,次のコマンドを入力して,http://127.0.0.1:8080/up/ に アクセスすることですることでインストールせずに動作を確認できます.(他の ホストからアクセスする場合は, 127.0.0.1 の部分を適当に置き換えてくだ さい)
$ su - # make -f GNUmakefile.apache start
もし, LoadModule 関連のエラーが出た場合は,conf/apache.conf を適宜修 正してください.
停止は,次のようにします.
# make -f GNUmakefile.apache stop
mod_uploader を実行するのに必要な環境が整っていない場合に表示されます.
この場合, Apache のエラーログに,「[mod_uploader] Exception: ....」 のような出力が出ていると思います.メッセージを参考にしながら設定を見直 して見て下さい.
また,メッセージが「Exception: \xc0\xdf\xc4\xea\xcf\xb3\xa4\xec\xa4\xac\xa4\xa2\xa4\xea\xa4\xde\xa4\xb9\xa1\xa5 」のように文字化けしている場合 1 ,Exception 以降の文字列をコピーして,コ ンソールで以下のようなコマンドを実行してみてください.日本語のエラーメッ セージを読むことができます.
$ perl -e 'print "\xc0\xdf\xc4\xea\xcf\xb3\xa4\xec\xa4\xac\xa4\xa2\xa4\xea\xa4\xde\xa4\xb9\xa1\xa5", "\n"' 設定漏れがあります.
[1] | AP_UNSAFE_ERROR_LOG_UNESCAPED を define してコンパイルした場合, このような文字化けは発生しません. |
下記のように, LD_PRELOAD に libunwind.so.5 を指定しながら Apache を起動したら症状が改善する場合,ICC のインストール方法に問題があります. もう一度設定を見直してください.
$ env LD_PRELOAD=/opt/intel_cc_81/lib/libunwind.so.5 "Apache の起動コマンド"
Comming soon...
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 は,巨大なファイルのアップロードにもわずかなメモリしか消費 しません.
それに対してアップローダの多くは,アップロードされたデータを一旦全てメ モリに入れて処理するため,アップロードにはファイルサイズに比例したサイ ズのメモリを消費してしまいます.
プログラムの作成にあたってお世話になった文献を紹介します.