タグ:apache

PHPでアップロードできる上限は2GBまで!【POSTの場合】


<form action="hoge.php" enctype="multipart/form-data" method="POST">
<input name="hogefile" type="file" />
<input type="submit" value="送信" />
</form>

PHPを使用して、このような形式でファイルをアップロードする場合、アップロードされるファイルサイズの上限はphp.iniで設定されています。(正確には.htaccessやPHP自身でも設定できますが。)

php.iniには、アップロードファイルの上限を設定する箇所が3つあります。

  • memory_limit(使用できるメモリの上限設定)
  • post_max_size(POSTされるデータの上限設定)
  • upload_max_filesize(アップロードされるファイルサイズの上限設定)

です。

それぞれ

memory_limit >= post_max_size >= upload_max_filesize

という関係になっています。

つまり、「upload_max_filesize」をいくら増やしても、「post_max_size」で設定されているサイズ以上のファイルはアップロードできないし、「post_max_size」を増やしても、「memory_limit」で設定されているサイズ以上のファイルはアップロードできないというわけです。

例:

memory_limit = "128MB"
post_max_size = "512MB"
upload_max_filesize = "1G"

この場合、アップロードできるファイルサイズの上限は128MBとなります。

memory_limit = "128MB"
post_max_size = "1G"
upload_max_filesize = "1G"

この場合でも同様。

もちろん、memory_limitは、サーバのメモリサイズ(仮想メモリ含む)の上限を超えることはできません。

つまり、

memory_limit = "2G"
post_max_size = "2G"
upload_max_filesize = "2G"

こう設定したとしても、実際のサーバのメモリ(+仮想メモリ)が1GB分しかなければ、1GBまでしかアップできないということになります。(他にもメモリ使ってるだろうから実際はもっと低い)

では、サーバのメモリを12GBくらい積んで

memory_limit = "4G"
post_max_size = "4G"
upload_max_filesize = "4G"

とした場合、4GBまでアップロードできるようになるか?

答えはNoです。

この原因は、apacheにあります。

apacheの設定に、「LimitRequestBody」というものがあり、これの上限は2GBとなっています。

「LimitRequestBody」はその名の通り、HTTPリクエストのボディ部分のサイズ限界です。

いくらPHP側の設定で、2GB以上を迎え入れる準備をしたところで、HTTPリクエストの方で限界を迎えるわけです。

まあ、2GB以上をアップすることは中々ないとは思いますが、大容量のファイル共有サイトなどを作ろうと思ったりした場合は、注意が必要ですね。(FTP接続の方式にすればうまくいくかも。)

 

参考サイト

総合管理者 | 2015年10月16日 | コメント(0) | トラックバック(0) | PHP関連

suExecをhomeフォルダ以下で有効にする

メモ。

専用サーバにて、マルチドメインに対応させるべく、あれこれ試行錯誤中。

とりあえず「var/www/」フォルダにウェブサイトを置くのではなく

/home/ユーザ名/www/html
/home/ユーザ名/www/cgi-bin

というレンタルサーバではよくある構成にし、httpd.confにて、それぞれドメインを割り当てる設定にしたのですが、ウェブサイトは正常に表示できるようになったものの、cgi-binの中に入れたperlが動かない・・・

正確には「httpd.conf」で「SuexecUserGroup」を設定したとたん動かなくなるんですが、設定どおりのユーザ名とグループにしているはずなのに動く気配なし。

Error 500 「Internal Server Error」について』の二の足は踏まん!と思ってたはずなのにこの有様・・・

いろいろと調べた結果、『今の設定だと「/var/www」以下に設置しないと「suExec」は有効にならないよ』ということが分かったんですが、その設定の変更方法が分からず、Googleであれこれ調べまくっているとこちらの記事を発見!

バーチャルホストでCGIを使う | Vagon

びっくりするほどわかりやすく説明してくれております。

この設定どおりに変更したところ、無事homeフォルダでも動くようになりました。

Copyright(c) 2010 - 2017 ダリの雑記