[PHP][heroku]upload_max_filesizeを変更する
herokuにて、upload_max_filesize
を変更してみた。
初め、ini_set
で変更しようとしてみたところ、
変更出来なかった。
ini_set('upload_max_filesize', '6M');
参考:php.iniの設定を変えてもファイルをアップロードできないケース
調べてみると、変更出来るもの、出来ないものがあるらしく、
upload_max_filesize
は、ini_set()
では変更出来ないよう。
upload_max_filesize
は、PHP_INI_PERDIR
となっていて、
php.ini、.htaccess、httpd.conf あるいは .user.ini (PHP 5.3 以降の場合) で設定可能なエントリ
となっている。
http://jp2.php.net/manual/ja/configuration.changes.modes.php
参考:PHP/ini_set()で変更できない値
http://hodade.adam.ne.jp/itmemo/index.php?PHP%2Fini_set()%A4%C7%CA%D1%B9%B9%A4%C7%A4%AD%A4%CA%A4%A4%C3%CD
herokuでは(たぶん).htaccessが使えない。
代わりに、.user.ini
を試してみるとそちらで変更出来た。
.user.ini
ファイルを作成して、アップロード。
設置したディレクトリ内でのみ、有効になる。
[内容]
upload_max_filesize = 6M
参考:PHP 5.3 の新機能: .htaccess の代わりになる .user.ini
追記
上記の方法を取ったけれど、pnp.iniの設定ファイルを読み込ませる方法があった。
今回herokuにインストールしたbuildpackは、confというディレクトリ以下に設定ファイルを置けば
自動で認識されるような作りになっていたようです。
なので、conf以下にphp.ini
ファイルを置けば、いちいち各ディレクトリに設定ファイルを置かないでも大丈夫。
さらに、このbuildpackの環境は以下になっています。
- PHP 5.4.9(mbstring, mysql, pgsql, phpredis, mcryptなどなど)
- nginx + php-fpm
この、nginx
というphpサーバはデフォルトではPOST出来るサイズが1MB
になっているよう。
ここも変更しておかないとエラーになってしまう。
nginxで”client intended to send too large body”が発生した時の対策方法
このnginxの設定ファイルは、nginx.conf.erb
になるので、これも置いておく。
デフォルトの設定ファイルはそれぞれ以下にある。
php.iniの設定
post_max_size = 8M
upload_max_filesize = 8M
nginxの設定
http {
client_max_body_size 1048576; # default 1M
server {
client_max_body_size 8M;
}
}