DockerでPHPのファイルアップロード上限を上げる方法

DockerでPHPをインストールした時、PHPのファイルアップロード上限サイズは、特に指定しなければ2MBに設定されます。
いくつかの方法で上限サイズを引き上げることができます。
例として500MBまで上げる方法を紹介します。

Dockerfileで設定する

イメージ作成時にDockerfileに下記のように書き加えることで、ファイル上限を上げることができます。

RUN echo "file_uploads = On\n" \
         "memory_limit = 500M\n" \
         "upload_max_filesize = 500M\n" \
         "post_max_size = 500M\n" \
         "max_execution_time = 600\n" \
         > /usr/local/etc/php/conf.d/uploads.ini

/usr/local/etc/php/conf.d に置かれたiniファイルはphp.iniに書かれたのと同じ扱いになります。  

.htaccessファイルで設定する

ディレクトリに.htaccessファイルを設置すると、設置されたディレクトリとそのサブディレクトリに記述された内容が適用されます。
コンテナを作るたびに.htaccessを設定する必要があります。

php_value memory_limit 500M
php_value upload_max_filesize 500M
php_value post_max_size 500M
php_value max_execution_time 600

 

php.iniを編集する

/usr/local/etc/php/php.ini のファイルを直接編集して、サーバーを再起動します。
コンテナを作るたびに php.ini を設定する必要があります。

memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600

(追記)
とはいえphp.iniを直接編集するのはお勧めできません。
/usr/local/etc/php/conf.d内に適当な名前のiniファイルを作れば、php.ini に書き加えたのと同じ扱いになります。  

スクリプト内でini_set()を使う

upload_max_filesizeという項目はini_set()では変更できませんでした。

PHPスクリプト内で ini_set() 関数を使って上書きします。
コンテナを作るたびにスクリプト内で ini_set() 関数を設定する必要があります。
 

設定値の意味

設定 役割 初期値
file_uploads HTTP ファイルアップロード を有効とするかどうか 1
memory_limit 一回のリクエストに使用できるメモリの上限 128M
upload_max_filesize アップロードされるファイルの最大サイズ 2M
post_max_size POSTデータに許可される最大サイズ 8M
max_execution_time スクリプトがパーサにより強制終了されるまでに許容される最大の 時間を秒単位で指定します 30

PHP: コア php.ini ディレクティブに関する説明 - Manual