[PHP] ファイルアップロードの上限サイズを変更する際にさわるディレクティブまとめ
きゃりーぱみゅぱみゅってうまく言えない・・・。みなさんこんにちは nakamura です。
ユーザにファイルをアップロードさせるような処理、あんまりないとは言いつつもやっぱり何気によく作りますよね。でも、作る度に毎回引っ掛かるのがファイルアップロードに関連する php.ini ディレクティブの設定です。upload_max_filesize さえ上げときゃ動くだろう、と思って上げてみると動いたり動かなかったり・・・。毎度毎度調べるのも面倒なので、今回は自分への備忘録的にその辺りをまとめてみたいと思います。
upload_max_filesize
とりあえず upload_max_filesize 。もう名前からしてモロ。これを変えないで何を変えるの。でもこれを変えただけだと動かない事が割りとよくあるのでご注意を。デフォルトは 2M です。
post_max_size
post_max_size は名前の通り許可される POST データの最大サイズです。デフォルトは 8M なので upload_max_filesize とともにデフォルト値のまま使うのであれば何の問題もありませんが、10M のファイルをアップロードさせたい!と upload_max_filesize を 10M に変えて post_max_size がデフォルトのままだと今度はこちらの制限に引っ掛かってしまいます。upload_max_filesize より少し大きめの値を指定しておくのがよいですね。
memory_limit
PHP スクリプトが利用可能なメモリの最大容量です。POST データは一旦メモリ上に保持されるので post_max_size よりも大きい必要があります。PHP-5.3.x 系ではデフォルト 128M ですが、それよりも前のバージョンをお使いの場合、バージョンによりデフォルト値が異なるようなのでご注意ください。
max_execution_time
- max_execution_time
スクリプトの最大実行時間です。ここで指定された秒数に達すると処理が終わっていなくてもスクリプトは強制終了されてしまいます。例えば単純なアップロードだけではなく、巨大な CSV ファイルを受け取ってパースして加工して DB に保存して・・・などの処理を同時に行う場合、アップロード自体はできても実行時間の制限に引っ掛かってしまう事がよくあります。デフォルトは 30 秒です。
max_file_uploads
- max_file_uploads
同時にアップロード可能なファイルの最大数。PHP-5.2.12 以降で利用可能です。複数のファイルを同時にアップロードさせるような場合に注意が必要ですが、デフォルト 20 なのでそうそう問題にはならないかな・・・。
終わりに
という事で、だいたい Apache 設定ファイルにいつもこんな感じで書いています。(もちろん .htaccess でもいいですよ)
<Directory "/home/projects/c-brains.jp/htdocs">
# それぞれの値は適宜変更してください
php_value max_execution_time 600
php_value upload_max_filesize 256M
php_value post_max_size 288M
php_value memory_limit 512M
</Directory>
参考になれば幸いです!