Herokuのphp.iniについて
Herokuの.user.iniに関するトラブルがあったのでメモしときます。 (以前もはまったようなハマってないような・・・。)
HerokuでPHPの設定を変更するときは .user.ini を利用して設定を変更します。
.user.iniはあるのに設定が反映されない
今回起きたトラブルは.user.iniがあるのに設定が反映されてないというトラブルに遭遇しました。
date.timezone = “Asia/Tokyo” を指定したのに、反映されてなかったです…。
まずはphp.iniを見てみる
heroku run でdynoに入ってphp.iniの状態をみました。
$ php -i | grep ini
user_ini.filename => .user.ini => .user.ini
普通に認識はされているのでtimezoneを確認してみます。
$ php -i | grep timezone
Default timezone => UTC
date.timezone => UTC => UTC
なぜか切り替わらない。
マニュアルを読んで見る
アプリケーションに設定した ドキュメントルート までのいずれかの親ディレクトリにある .user.ini ファイルからも設定を読み取ります。 プロジェクトのディレクトリに
.user.iniいれてるので大丈夫かと思っていました。 ただ、ドキュメントルートって本当にそうだったけ?という疑問もあるし、リンクもあったので一応確認してみようと思い定義を確認してみました。
PHP 向けの Web サーバーおよびランタイム設定のカスタマイズ | Heroku Dev Center
ドキュメントルートは、アプリケーションが .php ファイルの探索を開始するディレクトリです。 探索を開始?つまりProcファイルで以下のように指定した場合は
public配下になるということ・・・?
web: vendor/bin/heroku-php-nginx -C heroku/nginx/default.conf public/
ということで public/.user.ini に移動したらうまく動きました。
まとめ
Herokuの.user.iniの設置箇所は最初にphpを探索する場所なので、apache or nginxのドキュメントルートになります。