[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;
    }
}

参考:Heroku上に最新のPHP5.4 + Nginx環境を30秒で構築する

   このエントリーをはてなブックマークに追加