Walrus,Digit. | 一覧 | 検索 | 更新履歴(RSS) | 新規作成
はてなブックマークに追加 はてなブックマークを表示 編集 | 編集(管理者用) | 差分

WalRack

編集

ファイルアップロードCGI

NAME

編集

WalRack - Walrus File Rack CGI

DOWNLOAD

DESCRIPTION

WalRack (Walrus File Rack CGI)は、Web上にファイルの一時預かりスペースを作るためのCGIです。

WalRackは、Webページ上から設置者のWebファイルスペースにファイルをアップロードするためのCGIです。 WalRackには以下のような機能があります。

WalRackは、CGI_Liteのサンプルスクリプトを発展させた例として作成されています。 ドキュメント部分を除けば300行のスクリプト部分に、上記の機能を収めてあります。独自のファイル管理CGIを作成する時に、参考になるかも知れません。

WalRackは、Perl5を利用できるサーバー上で動作します。 JPerlについては未検証です。 もしかしたら、日本語のファイル名を持つファイルの処理などで問題が発生するかもしれません。

SETUP

環境設定

利用環境によって、修正すべき部分があります。 修正個所は、先頭行のPerlパスおよび先頭付近の環境設定部です。

修正後は、スクリプトをEUCコードで保存して下さい。 Windowsでは、秀丸など多くのエディタがこの文字コードに対応しています。

  • Perlのパス

1行目のPerlのパスを、設置するサーバーにあわせて修正してください。 多くの場合、'#!/usr/bin/perl'ですが、'#!/usr/local/bin/perl'など、その他のパスになることもあります。これが何になるのかは、私に聞いていただいても回答できません。 ご利用のサーバー管理者、プロバイダ、レンタルサーバー業者などにお問い合わせください。

  • プラットフォームとファイル名の文字コード ($platform, $filecode)

$platformを、サーバーのOSにあわせて、Unix、Windows、Macのいずれかに設定して下さい。 プラットフォームは(CGI_Liteモジュールが)ファイルパスの区切り文字を判別するのに使います。 例えばDOSやWindowsCEであれば、同じく区切り文字をもつWindowsに設定して下さい。

同様に、$filecodeをサーバーのOSにあわせて、'euc'、'sjis'、'jis'のいずれかに設定して下さい。 Windowsではsjis、UNIXでは'euc'か、'sjis'が一般的です。

  • ディレクトリ ($directory)

$directoryを、CGIからファイルを保存するディレクトリへの相対パスに書き直してください。 デフォルトでは、CGIと同じディレクトリに「file」というディレクトリを作成し、その下にファイルを保存します。 このディレクトリのパーミッションは666にして下さい。

  • パスワード ($password)

$passwordを適切なパスワードに変更してください。

  • 利用制限 ($access、$upload、$delete)

パスワードによる利用制限をしたいものを0に設定します。 パスワード制限が不要であれば、1に直してください。 $accessは利用全般、$uploadファイルのアップロード、$deleteはファイルの削除時の制限に対応しています。

  • ファイルサイズの上限 ($maxfilesize)

ファイルサイズの上限をキロバイト数で指定します。 制限しない場合は0にします。デフォルトでは50キロバイトに設定されています。

  • ファイルのパーミッション ($permission)

アップロードされたファイルの、OS上でのパーミッション設定です。 「$permission = 0644」のように、ダブルクォート等で括らずに、指定してください。

表示について、以下の設定があります。

  • タイトル ($title)

ページ上部およびブラウザウィンドウのタイトル部に表示されるタイトルを指定します。 デフォルトは「Walrus File Rack」です。

  • タイトルの表示位置 ($title_pos)

ページ上部のタイトル表示位置をright、left、centerのいずれかで指定します。 デフォルトはright(右寄せ)です。

ファイル名について、以下の自動変換関連の設定があります。

  • テキストとして扱う拡張子 (@name_add_txt)

'.txt'を付加したい拡張子を@name_add_txtに含めます。 この目的は、対象ファイルがサーバー上でCGIなどとみなされて実行されたり、あるいはPC上でHTMLだとみなされて中に含まれているJavaScript等が実行されるのを避けることです。 デフォルトでは、'pl'、'cgi'、'php'、'rb'、'htm'、'html'、'shtml'が含まれています。これらの拡張子のファイルが送信されると、'.txt'という拡張子を付加します。

残念なことに、Internet Explolerは拡張子が.txt、コンテンツタイプがtext/plainでも、HTMLなどとみなしてパースしてしまうようです。 これはInternet Exploler側の問題です。

  • バイナリとして扱う拡張子 (@name_add_bin)

'.bin'を付加したい拡張子を@name_add_binに含めます。 この目的は、対象ファイルがサーバー上で実行ファイルとみなされて実行されるのを避けることです。 デフォルトでは、'exe'が含まれています。 これらの拡張子のファイルが送信されると、'.bin'という拡張子を付加します。

  • 半角カナの扱い ($name_do_h2z)

ファイル名中の半角カナをそのまま残す時は0、全角に変換する時は1にします。 デフォルトは1です。 半角カナは、環境によっては事故の元になることに注意してください。

  • 禁止文字 ($name_incorrect_char)

ファイル名に含めるべきではない文字(<>[]?_*/\)の扱いを決定します。 0の時は削除、1の時は全角に変換します。 デフォルトは1です。

  • 全角英数字 ($name_conv_2byte)

全角の英数字、括弧、ハイフンなどの扱いを決定します。 1の時は半角に変換します デフォルトは1です。

設置

次のファイルをASCIIモードでFTPアップロードして下さい。

   ファイル・ディレクトリ パーミッション     内容
   ---------------------- -----------------  -------------
   +-- WalRack.cgi             711           CGI本体
   +-- lib/                    755           ディレクトリ
       +-- jcode.pl            644           文字コード変換ライブラリ
       +-- CGI_Lite.pm         644           CGI_Liteモジュール

この他に、$directoryに設定したディレクトリを作成し、パーミッションを777にして下さい。 デフォルトの設定であれば、WalRack.cgiと同じディレクトリに「file」というディレクトリを追加し、これのパーミッションを777に変更します。

動作確認

WalRack.cgiのURLを入力し、アクセスしてみて下さい。 ログイン画面か、ファイルリスト&ファイルアップロードの画面が出れば、設置できています。

一般的な問題には、以下のようなものが考えられます。

ASCIIモードで転送していない
Internal Server Errorが発生します。このCGIはASCIIモードでサーバーに送って下さい。
Perlのパスが正しくない
Internal Server Errorが発生します。 Perlのバージョンが古い時にも、起こる可能性が考えられます。ご利用のサーバー管理者、プロバイダ、レンタルサーバー業者などに確認してみて下さい。
エラーメッセージが表示される
KCatchモジュールによって、ほとんどのエラーはInternal Server Errorではなく、実際のPerlに出力したエラーをブラウザ上で見ることができます。このメッセージは、エラーの内容や、エラーが発生した行を含んでいますので、その部分を見直してください。

分からない場合は、作成者(塚本牧生)まで問い合わせてみて下さい。

動作確認後の作業

WalRackには、問題発生時に対処が容易になるように、KCatchモジュールがかなり強いオプション設定で組み込んであります。 これは、通常の問題が発生しないことが分かっている場合には、負荷を増やし、パフォーマンスを下げます。

KCatchの設定は、スクリプトの3行目で行っています。 WalRackを勉強目的ではなく、実際に使用するときはKCatchの設定を以下のいずれかにすることをお勧めします。

  • 弱いオプションで組込む

「use KCatch qw( jcode=euc stderr);」に変更します。 このオプションは、当初の設定に比べれば負荷への影響が少なくなります。

  • 組込みを停止

「# use KCatch~」のように行頭に#を追加します。

KCatchについては、Walrus,Digit.でも解説を置いています。オプションの意味はそちらで確認してください。

Memorundum and To Do

WalRackの位置付け

WalRackの役割は、CGI_Lite.pmを使った、ファイルアップロードCGIの例を示すことです。 つまり、私のページで説明している「CGI_Lite.pmを使った簡単なファイルアップロードCGI」から、実用的なファイル管理CGIを作成するまでの大きなギャップを埋めるための飛び石になることです。

実際、フォルダ作成や、ユーザー管理など、本格的にファイル管理に使うには、補うべき機能がいくつもあります。 しかしそれらは、下の「未実装の機能と実装されない機能」にあるように、ほとんど対応しないつもりです。

動作環境

Ver1.0.1は、Windows98se + AnHTTPd v.1.32 + ActivePerl 628の環境下で作成、試験されました。 また、以下の環境で動作を確認されました。

  • Windows98se + AnHTTPd v.1.32 + ActivePerl 628
  • Windows2000 + AnHTTPd v.1.37d + ActivePerl 630
  • FreeBSD 4.1.1 + Apache 1.3.x + Perl 5.005_03

Ver1.1.7は、Windows2000 + AnHTTPd v.1.41e + ActivePerl633の環境で更新され、上記のFreeBSD環境でも動作を確認されました。 Windows9x系の環境でも動作すると思われます。

私はこれ以外の環境を持っていないため、他の環境での動作は確認しておりません。 おそらく、Perl5.005以上が利用できる環境であれば、動作するだろうと思います。

未実装の機能と実装されない機能

  • 表示

Netscape Comunicator 6.02では枠線が乱れます。 これはCSSの解釈によるもののようですが、Internet Explolerでこちらの意図どおりに表示されること、IEの解釈が正しく思われること、実用上問題ないことから、これ以上の調整は行いません。 もし、本当に必要があれば、<table>タグでレイアウトを行うことで容易に解決できるでしょう。

WalRack1.0.1版ではNetscapeでは非常に表示が乱れましたが、1.1.1版で現状まで調整されました。

  • ディレクトリ

ディレクトリの作成や管理というのは、必要性が高いかもしれません。 しかし、この機能はおそらく実装されません。

難しくはないと思いますので、興味のある方はぜひ追加してみて下さい。

  • 複数のユーザー名とパスワード

ユーザー名とパスワードによるログインや、複数のユーザー/パスワードの登録もほしいところでしょう。 しかし、この機能もおそらく実装されませんので、チャレンジしてみて下さい。

このCGIは、ファイル保管ディレクトリ下に一時ファイルディレクトリ「temp」を作成します。ユーザー/パスワードファイルは同様に、「user」ディレクトリなどを作成し、その中に保管すると良いでしょう。

History

Ver.1.1.8

ファイル削除関連のセキュリティバグフィックス URLエンコード関連のバグを修正。

Ver.1.1.7

  • 特定の拡張子については、従来は拡張子を削除していたが、'.txt'または'.bin'を付加するように変更。
  • ファイルサイズ制限をキロバイト単位で指定するように変更。
  • ファイルサイズ制限がある場合、ファイルアップロードフォームの表示するように修正。
  • 制限を越えるサイズのファイルが送信されたとき、tempディレクトリから削除されない問題の修正。
  • ファイルを指定せずに「送信」を押すと、0バイトのファイルが作成される問題を修正。

Ver.1.1.6

  • 同梱のCGI_Liteを、v1.9を元にしたものに差し替え。
  • ファイルのパーミッションを指定可能。
  • URLエンコードをしないオプションを廃止。

Ver.1.1.5

  • 設定可能な項目にタイトルを追加。
  • ファイルの全角英数字、禁止文字の変換オプションを追加。
  • ファイル名変換ルーチンを修正。

Ver.1.1.4

  • ファイルへのリンクのURLエンコードを行わないオプションを追加。
  • ファイル名変換ルーチンを修正。

Ver.1.1.3

  • ファイル拡張子制限機能の付加。

Ver.1.1.2

  • ファイルアップロード部分のログメッセージ強化。
  • ファイルサイズ制限機能の付加。

Ver.1.1.1

  • Netscape向けにレイアウト調整。

Ver.1.0.1

  • 初公開版。

COPYRIGHT

Copyright 2001-2003, TSUKAMOTO, Makio

このCGIはフリーソフトウェアです。 Perl自身と同じ、「Artistic License」の条項の下で自由に改変し、再配布することを認めます。

AUTHOR

塚本 牧生 < walrus@digit.que.ne.jp > ( http://digit.que.ne.jp/ )

このページへのご意見、ご質問

コメントスパムがひどいためこのページのコメント欄を削除しました。コメントしたい方は暫定的に「掲示板」のページへお願いいたします。

(msyuichi)WalRackを自宅サーバーへのアップローダーとして使用させていただいております。 ありがとうございます。 質問です~WalRackで削除した「ファイル」はどこに行ってしまうのでしょうか? WalRackを設置している「自宅サーバー」のゴミ箱?どこ? 一瞬にして消えてしまうの?削除した「ファイル」は回収できますか、できませんか?

my $directory_url = 'http://www.example.org/walrack/';

の様な変数を定義しておいて、sub file_listupの中で、

#$list .= "<a href='" . $file{$_}->{'path'} . "'><b>" .  $file{$_}->{'name'} ."</b></a>";

とある行で、

$list .= "<a href='" . $directory_url.$file{$_}->{'name'} . "'><b>" . $file{$_}->{'name'} ."</b></a>";

の様な記法にすれば、リンクが変数directoryに左右されないURL的な表記に 出来るので、リンクが出来るようになります。

ファイル名を確認しています。
 -> .14.5.15-5.pdf -> 14.5.15e5.pdf -> 14.5.15e5.pdf -> 14.5.15e5.pdf
ログインフォームを生成します。
ファイルアップロードを処理しています。
ファイルアップロードの権限がありません。
ファイルアップロードに失敗しました。
一時ファイル./file/temp/14.5.15e5.pdfは破棄されました。

<エラーメッセージここまで> fileディレクトリのパーミッションは777です。tempディレクトリは残ったままです。解決方法を御教示願います。