• ベストアンサー

画像アップロード時のエラーハンドリングについて

いつもお世話になります。 ファイルアップロードするプログラムを作成しております。 ファイルサイズが100Kを超えたときにエラーメッセージを吐き出して、読み込みをやめるような処理にしたいのですが、ファイルをロックしてしまっているようです。 どのようなエラーハンドリングをすればよいのでしょうか? if ($inIMAGE1 ne '') { while ($bytesread = read($inIMAGE1, $buffer, $BUFSZ)) { $file .= $buffer; # ファイルサイズ制限 $file_size1 ++; if($file_size1 > 50) { print "Content-type: text/html\n\n"; print "*ファイルサイズが大きすぎます。100KB 以下にして下さい。\n"; #last; exit(0); }      }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

$ENV{CONTENT_LENGTH}はサーバの標準入力に送られたデータの総容量なので、個々のファイルサイズを参照することはできません。 大きなファイルを読み込まないようにするには、受け取るデータ量の最大値を設定した方が良いです。 おそらくCGIモジュールをお使いだと思いますので、 $CGI::POST_MAX = 1024 * 300 ←転送上限300KB というように上限値を設定すると300KB以上のデータは読み込まなくなります。 個々のファイルサイズは上記POST_MAXを設定した上でいったん全部読み込み、それから測った方が安全かもしれません。 なお、転送上限を超えたデータがリクエストされた場合はcgi_error()にエラー文字列が入ります。

その他の回答 (2)

noname#19175
noname#19175
回答No.3

exitする前にロックを解除するかファイルをクローズしてますか?

cardy55
質問者

お礼

taloo様ご回答ありがとうございます。unlock処理を加えた所改善いたしました。

回答No.1

$ENV{CONTENT_LENGTH}を参照したらどうでしょうか?

cardy55
質問者

補足

twinkleluz様ご回答ありがとうございます。 ファイルサイズを参照できるんですね。ありがとうございます。 私のプログラムでは上記分が3つ(つまり一度に3つのファイルをアップロードする事ができる)あるのですが、この場合は $remain1 = $ENV{'CONTENT_LENGTH'}; 処理1 $remain2 = $ENV{'CONTENT_LENGTH'}; 処理2 $remain3 = $ENV{'CONTENT_LENGTH'}; 処理3 という事も可能でしょうか?