README for mod_uploader (Windows)

mod_uploader: Apache のモジュールとして動作する高速アップローダ

Contents

mod_uploader とは?

mod_uploader は,よくあるアップローダを Apache のモジュールとして実 装したものです.以下のような特長があります.

アップロード画面のスクリーンショット

機能比較

他のアップローダとの機能比較を下記に示します.

他のアップローダとの機能比較

動作サンプル

http://acapulco.dyndns.org:7070/up/

動作環境

mod_uploader は,Windows で動作します.(Linux UNIX 版はこちら)

詳細を以下に示します.

ライセンス

The zlib/libpng LicenseThe zlib/libpng License の翻訳 )に従 います.

ダウンロード

Apache 2.0 系を使用している方へ

Apache 2.0 系を使用している方は, mod_uploader-ap2.0.so をダウ ンロードして,mod_uploader.so の代わりに使用してください.

CVS リポジトリ

下記のようにすることで 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 経由で参照 することもできます.

変更履歴

ChangeLog

インストール

mod_uploader-3.1.1.msi を実行すれば OK です.デフォルトでは C:/Program Files/mod_uploader 以下にインストールされます.

注意事項

動作環境 にも書いてありますが,あらかじめ Apache 及び ImageMagick を インストールしておく必要があります.(参考: Apache インストール手順, ImageMagick インストール手順)

設定

  1. [スタート] - [プログラム] - [mod_uploader] からたどれる UploaderConfig を起動します.起動すると下図の様なウィンドウが現れます.
UploaderConfig のスクリーンショット
  1. アップローダの URL を必要にあわせて変更します.他にも設定項目があり ますが,通常は変更する必要ありません.
  2. エラー エラーアイコン が表示されていれば,その項目を修正します. アイコンの上にカーソルをあわせると詳しい説明が表示されます.
  3. 「設定をコピー」ボタンを押して設定をクリップボードにコピーします.
  4. Apache の設定ファイル (httpd.conf) を開きます.設定ファイルは,[ス タート]-[プログラム]-[Apache HTTP Server 2.2.x]-[Configure Apache Server]-[Edit the Apache httpd.conf Configuration File] をクリックす ることで開くことができます.
  5. コピーしたものを Apache の設定ファイルの末尾に貼り付けます.

起動

Apache を普通に起動すれば OK です.設置した場所にブラウザでアクセス してみましょう.

トラブルシューティング

Apache が起動しなくなった

Apache のエラーログにエラー内容が出力されているので,内容を確認して設定 を見直してください.

ファイルのアップロードでエラーが出る

Apache をインストールした後,一度も再起動せずに mod_uploader のインストー ルおよび実行を行った場合,「Error: 文字コードの変換に必要なコンバータが 見つかりませんでした.(euc-jp -> euc-jp)」というエラーが出ます.

一度,Windows を再起動してから再度試してみてください.

進捗情報が常に Server Busy となる

UploaderBaseUrl と違うアドレスでアップローダにアクセスした場合に発生し ます.例えば,UploaderBaseUrl では http://localhost/up と指定しているの に,ブラウザでは http://127.0.0.1/up にアクセスしている場合がこれに該当 します.

UploaderBaseUrl で指定したアドレスでアクセスしてください.

ダウンロードカウンタがリセットされた

mod_uploader は,高速動作のため,ダウンロードカウンタのカウントアップを メモリ上でのみ行っており,Apache の終了時にデータをファイルに書き出すよ うになっています.そのため,Apache が正常に終了しなかった場合,ファイル への書き出しが行われずダウンロードカウンタが以前の状態にリセットされて しまいます.

コンパイル方法

通常はコンパイル作業は不要です.ソースを編集して細かくカスタマイズした い方のみ読んでください.

準備

Windoes 用 Apache のバイナリ版には,apr_iconv.h というファイルが抜けて いるという問題があるので,Apache の Windows 用ソースコード Win32 Source をダウンロードします.

ダウンロードしたものを解凍し,srclib/apr-iconv/include/apr_iconv.h を Apache の include ディレクトリにコピーします.

コンパイル

最初に,UNIX 系 OS で configure します.

$ ./configure

次に,ディレクトリを丸ごと Windows にコピーし,src/GNUmakefile.win32 の 次の部分を, Apache をインストールしたディレクトリおよび ImageMagick をインストールしたディレクトリに書き換えます.

APACHE_DIR  := C:/Server/Apache2
MAGICK_DIR  := C:/Application/Image/Edit/ImageMagick

上が完了したら,src/GNUmakefile.win32 を使って make します.

> cd src
> vsvars32.bat
> make -f GNUmakefile.win32

vsvars32.bat は,コマンドラインから Visual C++ .NET を使うための環 境設定を行うスクリプトです. Visual C++ .NET をインストールしたディ レクトリ以下の Common7/Tools にあります.

アンインストール

[スタート] - [設定] - [コントロールパネル] にある「プログラムの追加と削 除」から行えます.掲示板のデータは自動的には消去されませんので完全に消 去したい場合は手動でフォルダ (デフォルトでは C:/Program Files/mod_uploader) を削除してください.

注意事項

mod_uploader が動作中だとアンインストールが行えません.アンインストール 作業が途中で止まってしまう場合は,httpd.conf から mod_uploader の設定を 削除した後 Apache を再起動し,再度試してみてください.

テンプレートの調整

-X オプションもしくは`-DUPLOADER_DEBUG` オプションをつけて Apache を 起動すると再起動なしでテンプレートの修正が反映されます.テンプレートの 内容を調整する場合に利用すると便利です.

なお,通常モードで起動した場合,テンプレートを書き換えても Apache を再 起動するまでその内容は反映されません.

パフォーマンス

高速な表示

一秒間に処理できるリクエスト数

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 は,巨大なファイルのアップロードにもわずかなメモリしか消費 しません.

それに対してアップローダの多くは,アップロードされたデータを一旦全てメ モリに入れて処理するため,アップロードにはファイルサイズに比例したサイ ズのメモリを消費してしまいます.

テスト結果

テスト結果一覧

API ドキュメント

http://acapulco.dyndns.org/mod_uploader/api/

寄付

PayPal 経由での寄付を受け付けています.mod_uploader が気に入った場合は よろしくお願いします.いただいたお金は開発のための書籍購入などにあてさ せていただきます.

参考文献

プログラムの作成にあたってお世話になった文献を紹介します.

The Apache Modules Book Apacheモジュール プログラミングガイド Secure Coding in C And C++

The Apache Modules Book: Application Development With Apache
Apache 2.x のモジュール作成に必要になるのモジュール作成に必要にな る事柄を一通り説明した本.トップダウンで全体を眺めた後,ボトムアップ
Apacheモジュール プログラミングガイド
Apache のモジュール作成に必要になる事柄を一通り説明した本.痒いと ころに手が届いているので,手元に置いておくと重宝します.
Secure Coding in C And C++
C/C++ でプログラムを作るときにセキュリティホールが発生してしまう原理と その対策について詳しく説明した本です.丁寧に書かれているので内容を しっかりと理解することができます.
Advanced Topics in Module Design: Threadsafety and Portability
Apache 2.0 でモジュールを作成するときに必要になってくるテクニック が解説されたパワポ.そんなに長くないので,モジュール書く前にさらっと 読んでおきましょう.
Apache API C++ Cookbook
C++ を使って Apache のモジュールを作成する際の注意事項について説明 したサイト.
libapr (apache portable runtime) programming tutorial
APR のチュートリアル.サンプルコードおよび,間違いやすい点についての 記述が多いので重宝します.
Using libavformat and libavcodec: An Update
libavformat と libavcodec を使って動画からフレーム画像を取り出す方法 を解説したページ.丁寧に書かれています.
STL のページ
C++ の標準テンプレートライブラリである STL について簡潔にまとめられた サイト.
RubyExtensionProgrammingGuide
Ruby の拡張ライブラリの書き方を解説したサイト.基本的な事項から少し高 度な話題まで非常に良くまとまってます.
Compiler Construction Lecture
コンパイラ作成に関する実践的な内容が簡潔にまとめられたサイト.簡単な インタプリタもどきを作るんだったら,このサイトだけで十分かも.