| ブログトップ | PHP関連 |

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接続の方式にすればうまくいくかも。)

 

参考サイト

日々の生活にhappyをプラスする|ハピタス

このエントリーをはてなブックマークに追加

LINEで送る

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

トラックバック

トラックバックURL

コメントする

※メールアドレスが公開されることはありません。

名前 *
メール*
URL
Copyright(c) 2010 - 2017 ダリの雑記