• ベストアンサー

ファイルサイズ制限について

いつもお世話になります。 perlのプログラムファイルアップロードをよく見るとでファイルサイズ制限をしている箇所があります。 たとえば以下のステートメントです。 $BUFSZ = 2048; $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); この場合$BUFSZ = 2048; とはいったい何なのでしょうか? また上記例ではファイルサイズ600Kに制限されておりますが、300を超えた場合にエラーに成るようです。これは2Kをかけたものが実ファイルサイズという事に成っているのでしょうか? どなたかご教示願います。

  • Perl
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.2

$BUFSZ はバッファのサイズだと推測されます。 アップロードされたデータを、このサイズずつプログラムに読み込んでいくのです。 1回読み込むごとに$file_sizeをインクリメントしていって、300を越えた時点で、2048byte * 300回 = 600KBとなります。おそらく。

cardy55
質問者

お礼

SHOO-3様ありがとうございます。大変分かりやすいご説明で助かりました。バッファサイズ(一回ごとに読み込むエリア)は省略してもよろしいのでしょうか?またバッファサイズは何を基準に決めればよいのでしょうか?

cardy55
質問者

補足

追加質問欄に書き込むつもりが間違えてしまいました。申し訳ありません。SHOO-3様ありがとうございます。大変分かりやすいご説明で助かりました。バッファサイズ(一回ごとに読み込むエリア)は省略してもよろしいのでしょうか?またバッファサイズは何を基準に決めればよいのでしょうか?

その他の回答 (2)

  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.3

バッファサイズは省略してはいけないと思います。そうしないと、0バイト読み込むということになり、永久に0バイトずつ読み込み続けるという不毛なプログラムが出来上がってしまうと思うので。 ここで、読み込むというのは、送られてきたデータをプログラムで処理できる状態にするという意味です。すべてのデータを受け取らなければなりませんが、ネットワークの切断などの状況が発生しないとも言い切れなかったりするので、ちょっとずつ読み込むというのが慣例のようです。(そこら辺は詳しくないのでなんともいえませんが。) また、バッファサイズはわりと適当に決めてもかまわないと思います。 ただし、2のX乗の数値にすると、メモリが節約できる気分になれます。 ちなみに、2048は2の10乗の2倍の数値(つまり11乗)です。

cardy55
質問者

お礼

ご回答ありがとうございました。よく考えればワークエリアみたいなものなのですね。デフォルトがあるのかと思いましたが、そう都合が良いものではないのでしょうね。理解が深まりました。

  • rafysta
  • ベストアンサー率45% (24/53)
回答No.1

1kバイト = 1024バイトだから、$BUFSZ = 2048ということは、一度に2kバイトずつ読み込む。 一度に2kバイトずつ読み込むから、300回読み込めば600kバイト。

cardy55
質問者

お礼

rafysta様ありがとうございます。疑問が解消されました。

関連するQ&A

  • ファイルのアップロードについて

    PERLでファイルのアップロード機能を作成しています。 アップロードと言っても、サーバへのコピーではなく、 データベースへバイナリで格納しなければならないのです。 とりあえず2パターン作成してみたのですが、 OPEN関数を使ってやるとうまくいきません。 -----パターン1(OPEN関数使用)------------- $query = new CGI; $filename = $query->param('msds'); # ファイル名(フルパス)取得 if($filename ne "") { open(ATT, $filename);# or die "Could not open atachment file:"; binmode(ATT); while($bytesread = read(ATT, $buffer, $BUFSZ)){ $file .= $buffer; # ファイルサイズ制限 $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); } } close(ATT); } -----パターン2(OPEN関数未使用)------------- $query = new CGI; $filename = $query->param('temp1'); # ファイル名(フルパス)取得 if($filename ne "") { while($bytesread = read($filename, $buffer, $BUFSZ)){ $file .= $buffer; # ファイルサイズ制限 $file_size ++; if($file_size > 300){ exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。"); } } print "FILE DATA:" . $file . "<BR>"; } パターン2でprint $fileをすると、ファイルの内容が 画面表示されるのですが、パターン1だと、While文に 入ってくれませんでした。 原因がさっぱりわかりません。。。 お分かりになる方が見えましたらご教授願います。

    • ベストアンサー
    • CGI
  • 画像アップロード時のエラーハンドリングについて

    いつもお世話になります。 ファイルアップロードするプログラムを作成しております。 ファイルサイズが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); }      }

    • ベストアンサー
    • Perl
  • CGIのファイルアップローダーでサイズ制限

    ファイルアップローダーで下記のCGIを書きましたが、0バイトのファイルだけはどうしても通ってしまいます。どうすればいいでしょうか? ちなみに1バイトでもあればエラーを表示してくれます。 $file_size ++; if($file_size > 1000000){ exitError("ファイルサイズが大きすぎます。1MB以下 にしてください"); } $file_size ++; if($file_size < 500){ exitError("ファイルサイズが小さすぎます。500バイト以上にして下さい。"); } $file_size ++; if($file_size == 0){ exitError("0バイトのファイルです"); } } はじめは <500 だけでもいけると思ったんですが、ダメだったんで ==0 も加えたんですが、やはりダメでした。

    • ベストアンサー
    • CGI
  • .NETのアップロードのサイズ制限について

    .NETで構築したWebサイトを運営しているのですが、 新たに追加した画像アップロード機能でエラーが発生しました。 色々調べたところ、.NETのポスト制限?で4MB以上はアップロードできないことがわかりました。 そこで、Configファイルに以下の設定値を追加することで、回避できました。 <httpRuntime maxRequestLength="XXXXXX"/> XXXXXは任意のサイズ(KB) ただし、これらの設定値(サイズ)は厳密に何のサイズをチェックして、 .NETが制限しているのか調べてもよく分からなかったので、誰か教えてください。 純粋にUPLOADした際の画像サイズではなく、POSTデータ全体への制限? チェックされるタイミングは?

  • ファイル操作の記述について

    度々質問させていただいております。 また不明なステートメントです。 ファイル操作プログラムを見ていると$tFileSizeA = (-s "$sNewsData[20]");のような箇所があります。 おそらくファイルサイズを調べていると思いますが、(-e "file")のような記述も見られます。 これらはどのような事を行っているのでしょうか? またどうように-eや-sの他オプションはございますでしょうか。 どなたかご教示お願いいたします。

    • ベストアンサー
    • Perl
  • CGI.pmでファイルアップロードする際のバッファのサイズの制限はありますか?

    CGI.pmを使用してファイルのアップロードを行う際に、 while(read($file_name, $buffer, 1024)){ $file .=$buffer; } のような形で「1024」バイトずつファイルを読み込みますが、 この「1024」に入る数字に制限はあるのでしょうか? たとえば「20480」バイトずつ読み込む場合など・・・ このバッファサイズにより何か影響がでるようなことがあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • アップローダー「PHP」について

    まずは下記サイトをご覧ください。 PHPのアップローダーです。 http://www.netmania.jp/cgi/112.php サンプルを見るとおわかりの通り、 http://www.netmania.jp/cgi/up/ 仕様に、 >>■ファイルは800 KBまでアップロード可能です。 と書かれています。 これを →10MBまでアップロード可能に直したいのです。 しかし、単純にファイル内の ------------------------------------------- $limitk = 800; //アップロード制限(KB キロバイト) ------------------------------------------- を以下の様に、 ------------------------------------------- $limitk = 10000; //アップロード制限(KB キロバイト) ------------------------------------------- このように変更しても全く意味がありませんでした。 同ファイル下に以下のようなプログラムがあります。 これが少々ひっかかるのですが、もしかしたらここでしょうか? ------------------------------------------- function FormatByte($size){//バイトのフォーマット(B→kB) if($size == 0) $format = ""; else if($size <= 1024) $format = $size."B"; else if($size <= (1024*1024)) $format = sprintf ("%dKB",($size/1024)); else if($size <= (10*1024*1024)) $format = sprintf ("%.2fMB",($size/(1024*1024))); else $format = $size."B"; return $format; } ------------------------------------------- おそらくこの部分に関係してると思うのですが、 初心者な私は具体的にどう変更したら良いのかわかりません。 ご教授願います。

    • ベストアンサー
    • PHP
  • ファイルのアップロードで、

    ファイルをアップロードさせる事に成功しましたが、 不正処理を防ぐ為、制限させたいのですが、 処理方法が分かりません。 (1) JPGファイルのみに制限する事 (2) 100KB以下に制限する事 (3) ファイルが未入力の場合、 ファイルパスが存在しない場合、 拒否する=>exitする。 (4) 0バイトなど壊れていたら、拒否する=>exitする。 どんなIF文があるでしょうか?

    • 締切済み
    • PHP
  • 利用容量や画像サイズ、画像ファイルの制限

    色んなブログシステムなどでファイルのアップロードなどあると思うのですが、 アップロード可能な総容量の制限(アップロード時のファイル容量ではない)が設けられていると思います。 他に、大抵がアップロードするファイルの画像サイズを制限している と思われますが、これは一体どうすると実現出来るでしょうか? ご教示下さい。

    • 締切済み
    • PHP
  • 画像のファイルサイズについて

    ブログに画像をアップロードするときに500KB以下にしてくださいとあるので、デジカメからパソコンに取り込んだ画像を(900KBくらいあります)いつも編集で90%くらいに縮小してアップロードしているのですが、パソコンに取り込む時にまとめて縮小ってできないんでしょうか? (取り込んだあとにまとめてでも構いませんが・・) 一枚一枚やっているとすごく時間がかかってしまって。。 みなさんどうされてますか? それと縮小以外でファイルサイズを小さくする方法ってありますか? 初心者の質問で申し訳ありませんが宜しくお願いします。