polidog lab

Top About Rss
2022年04月27日

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 ファイルからも設定を読み取ります。 プロジェクトのディレクトリに .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のドキュメントルートになります。

comments powered by Disqus