BLOG
25年新卒 WEBエンジニア インターンシップ 受付中

大容量ファイルアップロードに関係するPHP・Apacheの設定

更新日:2017/02/28

大容量ファイルアップロードに関係するPHP・Apacheの設定をまとめました。

まず、ファイルアップロードページ等を作りたい場合、

upload.html

のようにフォームを作成すれば、サーバの「/tmp」などのディレクトリにファイルがアップロードされます。
しかし、このディレクトリは一時ファイル保存用ディレクトリなので、
アップロードリクエストが終了すると、せっかくアップロードしたファイルを削除してしまいます。
そこで、上のフォームで指定した「upload.php」の中でアップロードしたファイルを移動してやります。
例えばこんな感じです。

upload.php

is_uploaded_file()関数とmove_uploaded_file()関数は、
正しい方法でアップロードされたファイルかどうかをチェックする関数なので
利用した方が良いでしょう。

さて、本題ですが、
小さめのデータならこれでいいのですが、
どうしても大きめのデータ(ex. 1GB程度)をアップロードしたい!という場合、
PHPの設定やApacheの設定がデフォルトのままだとアップロードできません。
(デフォルトは2MBまで)

PHPの設定ファイルphp.iniでアップロード関連の設定を変えてやる必要があります。
php.iniを直接編集してもいいですが、.htaccessで設定する方が都合が良い時が多いです。
例えば・・・、

.htaccess

このような設定にすると2GB(程度)までの大容量データをアップロードできます。

上に書いた中で、「LimitRequestBody」に関しては、
実際にはphp.iniの中ではなく、
Apache関連の設定ファイルphp.confで設定されているものです。

ファイルが大きすぎる、回線が遅い、など、
アップロードに300秒以上かかるファイルを対応させる場合は、
Apacheの設定ファイルhttpd.confの中の「Timeout」項目を変更してやる必要があります。
(ついでに上の設定の *_time 関係も変更)
ちなみに、「Timeout」の項目は.htaccessでは設定できません。

南本貴之

FOLLOW US