• 締切済み

ファイルをアップロードしようとするファイルについて

お世話になっています。 ファイルのアップロードついて質問があります。 環境は OS:Linux PHP:4.0.6(訳あって、最新版にしていません。) php.iniは register_globals = Off 以外デフォルトです。 --aaa.php-- <html> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <form name="frmFile" enctype="multipart/form-data" method="post" action="bbb.php"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000"> <input type="file" name="UserFile"> <input type="submit" name="btnSubmit" value="go"> </form> </body> </html> --bbb.php-- <? echo "name:" . $HTTP_POST_FILES["UserFile"]["name"] . "<br>"; echo "size:" . $HTTP_POST_FILES["UserFile"]["size"] . "<br>"; ?> 以上のようなソースaaa.phpとbbb.phpがあります。このソースだと2000000バイト以内ならアップロードできるということですよね。 1980054バイト(1.88MB)だと name:ddd.bmp size:1980054 のように、結果が返ってきますが、 6750054バイト(6.43MB)だと name:bbb.bmp size:0 12000054バイト(11.4MB)だと name: size: という風に違ってきてしまうんです。これって何なのでしょうか? また、2000000バイトならエラーメッセージを表示したいというとき どのような対応をしていますか?また、その対応はファイルサイズがいくらでも大丈夫ですか? よろしくお願いいたします。

みんなの回答

  • Saka-Q
  • ベストアンサー率0% (0/2)
回答No.2

>これって何なのでしょうか? PHPには、postできるサイズの上限があります。 phpinfo関数で得られるupload_max_filesize(Defaultは2MB)と、post_max_size(Defaultは8MB)がそれ(だったはず)です。 とりあえずpostデータをひっくるめて8MBまでは受信するが、ファイルとして扱うのは2MBまで、と言う事になります。 今回の場合、 1)1.88MBのファイル upload_max_size及びpost_max_size以下であるため、正常に受信完了し、ファイル名及びファイルサイズを取得。 2)6.43MBのファイル post_max_size以下であるため、受信完了し、ファイル名取得したが、upload_max_filesizeを超えているため、対象ファイルを廃棄。 3)11.4MBのファイル post_max_sizeを超えたため、受信完了前に中断し、破棄(=postされていないと同義)されている。 (よって、ファイル名、ファイルサイズとも取得できない) というストーリーで得られた結果ではないかと思います。 >2000000バイトならエラーメッセージを表示 上記の理由からupload_max_filesize(またはMAX_FILE_SIZE)~post_max_sizeの間である前提では、#1 abon様の手法(ただし、2000000より大きな値は得られないので、==0で比較する?)で、同時にpostされたはずのデータの有無(またはアップロードされたファイルが破棄されたかどうか)をチェックすれば良いかと思います…が、手段は思いつきません。(^^;; 余談ですが、MAX_FILE_SIZEはあまり信頼しない方がいいパラメータのようです。 過去に、MAX_FILE_SIZEでの制限以上のファイルサイズでアップロードできてしまいました。

  • abon
  • ベストアンサー率33% (4/12)
回答No.1

1kbpsを1024bps、1Mbpsを1024kbps とすると、1.88Mは1980054byteと言う事になるんですね。 エラー表示の方法ですが、 --bbb.php-- <? if($HTTP_POST_FILES["UserFile"]["size"] >2000000){ echo("エラー!アップロードできるサイズは2Mまでです!") }else{ echo "name:" . $HTTP_POST_FILES["UserFile"]["name"] . "<br>"; echo "size:" . $HTTP_POST_FILES["UserFile"]["size"] . "<br>"; } ?> と言うような感じではないでしょうか? 試しはしてないので・・・(^^;)

関連するQ&A