ファイルアップロードCGI
WalRack - Walrus File Rack CGI
WalRack (Walrus File Rack CGI)は、Web上にファイルの一時預かりスペースを作るためのCGIです。
WalRackは、Webページ上から設置者のWebファイルスペースにファイルをアップロードするためのCGIです。 WalRackには以下のような機能があります。
WalRackは、CGI_Liteのサンプルスクリプトを発展させた例として作成されています。 ドキュメント部分を除けば300行のスクリプト部分に、上記の機能を収めてあります。独自のファイル管理CGIを作成する時に、参考になるかも知れません。
WalRackは、Perl5を利用できるサーバー上で動作します。 JPerlについては未検証です。 もしかしたら、日本語のファイル名を持つファイルの処理などで問題が発生するかもしれません。
利用環境によって、修正すべき部分があります。 修正個所は、先頭行のPerlパスおよび先頭付近の環境設定部です。
修正後は、スクリプトをEUCコードで保存して下さい。 Windowsでは、秀丸など多くのエディタがこの文字コードに対応しています。
1行目のPerlのパスを、設置するサーバーにあわせて修正してください。 多くの場合、'#!/usr/bin/perl'ですが、'#!/usr/local/bin/perl'など、その他のパスになることもあります。これが何になるのかは、私に聞いていただいても回答できません。 ご利用のサーバー管理者、プロバイダ、レンタルサーバー業者などにお問い合わせください。
$platformを、サーバーのOSにあわせて、Unix、Windows、Macのいずれかに設定して下さい。 プラットフォームは(CGI_Liteモジュールが)ファイルパスの区切り文字を判別するのに使います。 例えばDOSやWindowsCEであれば、同じく区切り文字をもつWindowsに設定して下さい。
同様に、$filecodeをサーバーのOSにあわせて、'euc'、'sjis'、'jis'のいずれかに設定して下さい。 Windowsではsjis、UNIXでは'euc'か、'sjis'が一般的です。
$directoryを、CGIからファイルを保存するディレクトリへの相対パスに書き直してください。 デフォルトでは、CGIと同じディレクトリに「file」というディレクトリを作成し、その下にファイルを保存します。 このディレクトリのパーミッションは666にして下さい。
$passwordを適切なパスワードに変更してください。
パスワードによる利用制限をしたいものを0に設定します。 パスワード制限が不要であれば、1に直してください。 $accessは利用全般、$uploadファイルのアップロード、$deleteはファイルの削除時の制限に対応しています。
ファイルサイズの上限をキロバイト数で指定します。 制限しない場合は0にします。デフォルトでは50キロバイトに設定されています。
アップロードされたファイルの、OS上でのパーミッション設定です。 「$permission = 0644」のように、ダブルクォート等で括らずに、指定してください。
表示について、以下の設定があります。
ページ上部およびブラウザウィンドウのタイトル部に表示されるタイトルを指定します。 デフォルトは「Walrus File Rack」です。
ページ上部のタイトル表示位置をright、left、centerのいずれかで指定します。 デフォルトはright(右寄せ)です。
ファイル名について、以下の自動変換関連の設定があります。
'.txt'を付加したい拡張子を@name_add_txtに含めます。 この目的は、対象ファイルがサーバー上でCGIなどとみなされて実行されたり、あるいはPC上でHTMLだとみなされて中に含まれているJavaScript等が実行されるのを避けることです。 デフォルトでは、'pl'、'cgi'、'php'、'rb'、'htm'、'html'、'shtml'が含まれています。これらの拡張子のファイルが送信されると、'.txt'という拡張子を付加します。
残念なことに、Internet Explolerは拡張子が.txt、コンテンツタイプがtext/plainでも、HTMLなどとみなしてパースしてしまうようです。 これはInternet Exploler側の問題です。
'.bin'を付加したい拡張子を@name_add_binに含めます。 この目的は、対象ファイルがサーバー上で実行ファイルとみなされて実行されるのを避けることです。 デフォルトでは、'exe'が含まれています。 これらの拡張子のファイルが送信されると、'.bin'という拡張子を付加します。
ファイル名中の半角カナをそのまま残す時は0、全角に変換する時は1にします。 デフォルトは1です。 半角カナは、環境によっては事故の元になることに注意してください。
ファイル名に含めるべきではない文字(<>[]?_*/\)の扱いを決定します。 0の時は削除、1の時は全角に変換します。 デフォルトは1です。
全角の英数字、括弧、ハイフンなどの扱いを決定します。 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を入力し、アクセスしてみて下さい。 ログイン画面か、ファイルリスト&ファイルアップロードの画面が出れば、設置できています。
一般的な問題には、以下のようなものが考えられます。
分からない場合は、作成者(塚本牧生)まで問い合わせてみて下さい。
WalRackには、問題発生時に対処が容易になるように、KCatchモジュールがかなり強いオプション設定で組み込んであります。 これは、通常の問題が発生しないことが分かっている場合には、負荷を増やし、パフォーマンスを下げます。
KCatchの設定は、スクリプトの3行目で行っています。 WalRackを勉強目的ではなく、実際に使用するときはKCatchの設定を以下のいずれかにすることをお勧めします。
「use KCatch qw( jcode=euc stderr);」に変更します。 このオプションは、当初の設定に比べれば負荷への影響が少なくなります。
「# use KCatch~」のように行頭に#を追加します。
KCatchについては、Walrus,Digit.でも解説を置いています。オプションの意味はそちらで確認してください。
WalRackの役割は、CGI_Lite.pmを使った、ファイルアップロードCGIの例を示すことです。 つまり、私のページで説明している「CGI_Lite.pmを使った簡単なファイルアップロードCGI」から、実用的なファイル管理CGIを作成するまでの大きなギャップを埋めるための飛び石になることです。
実際、フォルダ作成や、ユーザー管理など、本格的にファイル管理に使うには、補うべき機能がいくつもあります。 しかしそれらは、下の「未実装の機能と実装されない機能」にあるように、ほとんど対応しないつもりです。
Ver1.0.1は、Windows98se + AnHTTPd v.1.32 + ActivePerl 628の環境下で作成、試験されました。 また、以下の環境で動作を確認されました。
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」ディレクトリなどを作成し、その中に保管すると良いでしょう。
Copyright 2001-2003, TSUKAMOTO, Makio
このCGIはフリーソフトウェアです。 Perl自身と同じ、「Artistic License」の条項の下で自由に改変し、再配布することを認めます。
コメントスパムがひどいためこのページのコメント欄を削除しました。コメントしたい方は暫定的に「掲示板」のページへお願いいたします。
(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的な表記に 出来るので、リンクが出来るようになります。
と言うタグを挿入してみたら、やっとエラーは出なくなったのですが・・・どうしてもアップロードができません。(エラーは出ないし、試しに手作業でユーザーディレクトリにファイルを置いてみると、そのファイルの存在は表示されるので
すが、削除もできません。どこが悪いのかご教授願えませんでしょうか?(いじったのは、以上の四箇所への挿入だけで、これをしなければ、WalRackは正常に動作していrるのですが・・・)
ファイル名を確認しています。 -> .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ディレクトリは残ったままです。解決方法を御教示願います。