プロが教える店舗&オフィスのセキュリティ対策術

Perl/CGI初心者です。

仕事でホームページの改良をする事になりました。
現状は、そのホームページでは掲示板、アクセスカウンタ等をCGIで組んでいます。

今回、ファイル(PDF・エクセル・ワード)のダウンロードの機能を追加することになり、
さらにダウンロードするファイルを管理者が追加・削除できるようにしたいとの要望です。
サーバーはレンタルサーバーで現在の契約プランではデータベースは構築できません。
なので、画面から入力した対象ファイルのパスをテキストに保存し、
それをHTMLで表示した時にリンクできるようにできないかと考えています。

ファイルのダウンロード機能についてはPerlでもいくつか手段があるというところまで調べたのですが、
一般的にはダウンロード機能はPerlとPHPのどちらで作成するのが理想なのでしょうか?
場合によっては現在CGIで動いている部分をPHPで作り変える事も検討するつもりです。

ホームページ作成は初めてで周囲にも経験者が居ません。
基本的な事が、まだ理解出来ていない部分もありますので、
質問内容が意味不明かもしれませんが、お力添えお願いします。

A 回答 (2件)

まず、どこまでの作りこみをご検討か解りませんが、(SQL?)データベースの事でお悩みの部分はファイル管理では不十分でしょうか?



それとファイルのダウンロード機能?についてはエクセルなどのファイルをブラウザで表示してしまうのではなく、ダウンロードの確認ダイアログを出したいと言った旨でしょうか。
もし上記のようでしたらperlとphpで悩んでおられる部分は現在のスクリプトを書き換えるまでの大差はないです。
例えばファイル名などのリンクをクリックするとダウンロードダイアログが出現されるようにしたいとしたらエクセルであればヘッダー出力を以下のようにするだけです。
Content-type: application/vnd.ms-excel\n
Content-Disposition: attachment; filename="$filename"\n

ダウンロードさせる際、エクセルファイルを変数に読み込ませる部分がperlとphpでは1、2行程度違うだけです。

>画面から入力した対象ファイルのパスをテキストに保存し、
それをHTMLで表示した時にリンクできるようにできないかと考えています

ファイルのリスティングの事でしょうか。
ファイルのパス、ファイル名が欲しいだけでしたら保存されるファイルを一つのディレクトリにまとめてしまって
readdir でファイル名の一覧を取得して表示させてしまえば余計な書き込みもなく済む気がしますが如何でしょう。

ダウンロードするファイルを管理者が追加・削除できるように との事ですのでブラウザ上でそれを行うとしたら削除に関してはリスティング表示したファイルから選ばせてunlink();
追加はローカルPCからwebサーバーへのフォームを使ってマルチパートでアップロード。

上記のような形ではどうでしょうか?全然主旨が違ったら申し訳ありません。

この回答への補足

詳しいご回答ありがとうございます。

>まず、どこまでの作りこみをご検討か解りませんが、(SQL?)データベースの事でお悩みの部分はファイル管理では不十分でしょうか?

こちら側の説明不足でした。
現行のものはそのようにしています。できたら、同じように作りこみたいと考えています。

>それとファイルのダウンロード機能?についてはエクセルなどのファイルをブラウザで表示してしまうのではなく、ダウンロードの確認ダイアログを出したいと言った旨でしょうか。

やりたい事はご察しの通り、ダウンロードの確認ダイアログを表示させたい事です。
実現にはperlでもphpでも処理に大差は無いという事なのですね。
perlでやりたいと思います。

>ファイルのリスティングの事でしょうか。
>ファイルのパス、ファイル名が欲しいだけでしたら保存されるファイルを一つのディレクトリにまとめてしまって
>readdir でファイル名の一覧を取得して表示させてしまえば余計な書き込みもなく済む気がしますが如何でしょう。

これもこちらの説明不足のような気がします。
具体的には

-----------------------------------------------
  ファイル名1       | □ ←ファイルアイコン(クリックでダイアログ表示)
-----------------------------------------------
  ファイル名2       | □
-----------------------------------------------
     ・
     ・
     ・

というような他サイトでも良く見かけるような感じにしたいのですが、アドバイス内容のような方法でも実現可能でしょうか?

>追加はローカルPCからwebサーバーへのフォームを使ってマルチパートでアップロード。

すみません。調べてみましたが、内容がいまいち理解できません。
マルチパートでアップロードとは具体的にどういう事なのでしょうか?
申し訳ありませんが、ご教示願います。

補足日時:2009/06/23 10:56
    • good
    • 0

readdir でリスティングさせてご要望のような形にするとしたら


例えば配列@listに全ファイル名を代入
@listをforeachで回して下のようにprintを繰り返す
-----------------------------------------------
  ファイル名1       | □ ←ファイルアイコン(クリックでダイアログ表示)


ファイルアイコンのリンク先はエクセルをダウンロードさせる為のCGIです。同じCGIでサブルーチンを用意すれば良いと思います。
GETでファイル名を渡せばOKですね。

エクセルをダウンロードさせる為のサブルーチンは下のような形でしょうか。

sub dlwork
{
# ファイルのパスとダウンロードする時のファイル名を引数から受け取る
my$filepath = shift @_;
my$filename = shift @_;
# 確認ダイヤログ表示用にHTTPヘッダ送信
print qq|Content-type: application/vnd.ms-excel\n|;
print qq|Content-Disposition: attachment; filename="ファイル名"\n|;
print qq|\n|;
# 該当ファイルを一度読み込んで出力
open(FILE,"$filepath");
while(<FILE>){
print;
}
close(FILE);
}

エクセル以外の時はそのファイルに合わせたヘッダーの条件分岐が必要ですね。
htaccessでヘッダー指定ができたら良いのですが、IEだとhtaccessのヘッダー出力を無視するんですね。

マルチパートでのアップロードに関しては参考URLがものすごい解り易いです。
解らない所があったらご自分の言葉で構いませんので出来るだけ具体的にご質問下さい。

参考URL:http://www.ss.iij4u.or.jp/~somali/web/_perl_uplo …
    • good
    • 0
この回答へのお礼

細かいアドバイス本当にありがとうございます。

ファイルのダウンロード・アップロードに関しては、なんとなくどうすれば良いのか解ってきました。
ですが、まだ完全に理解できるレベルまで達していない様なので、アドバイスを基にもう少し勉強してみます。

また、つまづいたら質問させて頂きたいと思います。
ありがとうございます。

お礼日時:2009/06/23 17:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!