大容量ファイルアップロードに関係するPHP・Apacheの設定をまとめました。
まず、ファイルアップロードページ等を作りたい場合、
upload.html
1 2 3 4 5 6 7 8 | ・・・ <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" name="submit" value="送信"> </form> ・・・ |
のようにフォームを作成すれば、サーバの「/tmp」などのディレクトリにファイルがアップロードされます。
しかし、このディレクトリは一時ファイル保存用ディレクトリなので、
アップロードリクエストが終了すると、せっかくアップロードしたファイルを削除してしまいます。
そこで、上のフォームで指定した「upload.php」の中でアップロードしたファイルを移動してやります。
例えばこんな感じです。
upload.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ・・・ $tmp_name = $_FILES["file"]["tmp_name"]; $upload_path = ""; // ファイルを実際にアップロードしたいディレクトリ if (is_uploaded_file($tmp_name)) { if (move_uploaded_file($tmp_name, $upload_path)) { echo 'アップロード成功!'; } else { echo 'ファイル移動エラー'; } } else { echo 'アップロードエラー'; } ・・・ |
is_uploaded_file()関数とmove_uploaded_file()関数は、
正しい方法でアップロードされたファイルかどうかをチェックする関数なので
利用した方が良いでしょう。
さて、本題ですが、
小さめのデータならこれでいいのですが、
どうしても大きめのデータ(ex. 1GB程度)をアップロードしたい!という場合、
PHPの設定やApacheの設定がデフォルトのままだとアップロードできません。
(デフォルトは2MBまで)
PHPの設定ファイルphp.iniでアップロード関連の設定を変えてやる必要があります。
php.iniを直接編集してもいいですが、.htaccessで設定する方が都合が良い時が多いです。
例えば・・・、
.htaccess
1 2 3 4 5 6 7 8 9 10 | php_value file_uploads On php_value upload_max_filesize 2000M php_value post_max_size 2000M php_value memory_limit 3000M php_value max_execution_time 300 php_value max_input_time 300 LimitRequestBody 2147483647 |
このような設定にすると2GB(程度)までの大容量データをアップロードできます。
上に書いた中で、「LimitRequestBody」に関しては、
実際にはphp.iniの中ではなく、
Apache関連の設定ファイルphp.confで設定されているものです。
ファイルが大きすぎる、回線が遅い、など、
アップロードに300秒以上かかるファイルを対応させる場合は、
Apacheの設定ファイルhttpd.confの中の「Timeout」項目を変更してやる必要があります。
(ついでに上の設定の *_time 関係も変更)
ちなみに、「Timeout」の項目は.htaccessでは設定できません。
南本貴之