ファイルサイズを制限するには?

[上に] [前に] [次に]
Kou [E-Mail] 2000/05/14(日) 09:53:44
とほほさんの、wwwupl2.cgiを使って、フォームから
ファイルをサーバー上へアップロード(投稿)する
ホームページを作りたいと考えています。
しかし、サーバーの容量が10MBなので、投稿が山ほどくると、
パンクしてしまいそうで、心配です。
そこで、ファイルのサイズ(150KBまで)でアップロードが出来るか
出来ないかを判別するCGIを書き加えたいのですが
どのように書けばいいのでしょうか。よろしくおねがいします。
以下は、wwwupl2.cgiの中身の抜粋です。

# 標準入力からデータを読みだす
$buf = "";
$read_data = "";
$remain = $ENV{'CONTENT_LENGTH'};
binmode(STDIN);
while ($remain) {
  $remain -= sysread(STDIN, $buf, $remain);
  $read_data .= $buf;
}

sadahiro [E-Mail] 2000/05/14(日) 20:46:20
環境変数では,$ENV{'CONTENT_LENGTH'}が入力データの長さ(バイト単位)を受け取るので
(しかしファイルサイズとは少しだけずれるようだ),
これが一定値以上なら処理を中止すればいいでしょう.
以下,> の後ろはレスの意味ではなく,コードを示すとします.

>$remain = $ENV{'CONTENT_LENGTH'};
のすぐうしろに例えば
>if ($remain > 150000) {print "ファイル大きすぎ処理中止";exit;}
でもいれればいいでしょう(print内容はお好きなように).
でもこれだと出力HTMLが中途半端なので,それらをうまくフォローしたらいいと思います.

たとえば,
>print "下記のファイルを受け取りました。\n";
>print "<UL>\n";
は「中止」の時に出力されないよう,後ろにもっていくべきだし,
># ページフッタを書き出す
より下は「中止」のときも出力させる(サブルーチンで囲むと楽)
というような具合でしょうか。
細かい処置は試行錯誤してください.

Kou [E-Mail] 2000/05/15(月) 18:43:49
[[解決]]
sadahiroさん、レスありがとうございます!!

ややや$ENV{'CONTENT_LENGTH'}がファイルのサイズを示すものだったのですか!
なんか、あやしいなこれはとは思っていたのですが・・・。

さて、コードのほうですが、sadahiroさんが書かれたのを少し変えて、
まず、
>if ($remain > 150000) {&error;}
と、サブルーチンで囲んでしまいました。
そして、>print "下記のファイルを受け取りました。\n";
>print "<UL>\n";
を、うまく処理しました。
これで、ファイルサイズの制限が出来るようになりました。

ありがとうございました。

Kou [E-Mail] 2000/05/15(月) 18:51:06
と、思ったのですが、なぜか、
>if ($remain > 150000) {&error;}
が、無視されている!!!
うーーー!!!困った困った・・・。
誰か、手ほどきをお願いします!

CIMA [E-Mail] 2000/05/15(月) 21:29:11
Kouさん、こん○○は。 CIMAです。

printして$remainの中身は確認されましたか?
また、"gt"なんかも試してみるのも手ではないでしょうか?

Kou [E-Mail] 2000/05/15(月) 22:24:25
[[解決]]
CIMAさん、レスありがとうございます。

>printして$remainの中身は確認されましたか?

えと、、、今、やってみた結果をお知らせしますと、
1574 Byteのファイルをアップロードしたところ、
$remainは、1782でした。
これで、sadahiroさんの(しかしファイルサイズとは少しだけずれるようだ)というのが
わかりました。
しかし今、僕は

>if ($remain > 150) {$error;}

と、ん??ちょっとまてよ。おや?
$error;てなんじゃー!!&error;の間違いでした!
なんでだろ・・・。ちゃんと、書いたつもりだったのに。
書き直して、実行しなおしてみると、とてもうまく動きました。。。

すいませんでした。お騒がせしまして。
こういう、基本的なミスは、しないように気をつけます。
CIMAさん、sadahiroさん、そして、とほほさんありがとうございました。

[上に] [前に] [次に]