- ベストアンサー
ファイルサイズ制限について
いつもお世話になります。 perlのプログラムファイルアップロードをよく見るとでファイルサイズ制限をしている箇所があります。 たとえば以下のステートメントです。 $BUFSZ = 2048; $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); この場合$BUFSZ = 2048; とはいったい何なのでしょうか? また上記例ではファイルサイズ600Kに制限されておりますが、300を超えた場合にエラーに成るようです。これは2Kをかけたものが実ファイルサイズという事に成っているのでしょうか? どなたかご教示願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
$BUFSZ はバッファのサイズだと推測されます。 アップロードされたデータを、このサイズずつプログラムに読み込んでいくのです。 1回読み込むごとに$file_sizeをインクリメントしていって、300を越えた時点で、2048byte * 300回 = 600KBとなります。おそらく。
その他の回答 (2)
- SHOO-3
- ベストアンサー率56% (28/50)
バッファサイズは省略してはいけないと思います。そうしないと、0バイト読み込むということになり、永久に0バイトずつ読み込み続けるという不毛なプログラムが出来上がってしまうと思うので。 ここで、読み込むというのは、送られてきたデータをプログラムで処理できる状態にするという意味です。すべてのデータを受け取らなければなりませんが、ネットワークの切断などの状況が発生しないとも言い切れなかったりするので、ちょっとずつ読み込むというのが慣例のようです。(そこら辺は詳しくないのでなんともいえませんが。) また、バッファサイズはわりと適当に決めてもかまわないと思います。 ただし、2のX乗の数値にすると、メモリが節約できる気分になれます。 ちなみに、2048は2の10乗の2倍の数値(つまり11乗)です。
お礼
ご回答ありがとうございました。よく考えればワークエリアみたいなものなのですね。デフォルトがあるのかと思いましたが、そう都合が良いものではないのでしょうね。理解が深まりました。
- rafysta
- ベストアンサー率45% (24/53)
1kバイト = 1024バイトだから、$BUFSZ = 2048ということは、一度に2kバイトずつ読み込む。 一度に2kバイトずつ読み込むから、300回読み込めば600kバイト。
お礼
rafysta様ありがとうございます。疑問が解消されました。
お礼
SHOO-3様ありがとうございます。大変分かりやすいご説明で助かりました。バッファサイズ(一回ごとに読み込むエリア)は省略してもよろしいのでしょうか?またバッファサイズは何を基準に決めればよいのでしょうか?
補足
追加質問欄に書き込むつもりが間違えてしまいました。申し訳ありません。SHOO-3様ありがとうございます。大変分かりやすいご説明で助かりました。バッファサイズ(一回ごとに読み込むエリア)は省略してもよろしいのでしょうか?またバッファサイズは何を基準に決めればよいのでしょうか?