PHP の php.ini の中で環境変数を使う方法まとめ

DockerPHP

PHP の設定ファイル php.ini の中で環境変数を使う方法についてかんたんにまとめました。

動作確認時のバージョン

  • PHP: 8.0.27
  • Docker イメージ: php:8.0-apache

php.ini の中で環境変数を使う方法

php.ini の中で環境変数を使いたいときは ${NAME} という記法を使えば OK です。

post_max_size = ${PHP_UPLOAD_MAX_FILESIZE}
upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}

ルールがいくつかあります:

  • " の文字列中では使えるが、 ' の文字列中では使えない
  • 波括弧付きの ${NAME} は使えるが、波括弧なしの $NAME は使えない

これらのルールについて以下かんたんに説明します。

右辺でそのまま使用する → OK

upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}
; => 環境変数として展開される

右辺の値でそのまま使用するのは OK です。

" (ダブルクォーテーション)の中で使用する → OK

sendmail_path = "/usr/bin/msmtp -t --host=${SMTPD_HOST} --port=${SMTPD_PORT}"
; => 環境変数として展開される

右辺を " ~ " で囲ったときも使用できます。 この例では ${SMTPD_HOST}${SMTPD_PORT} の部分はそれぞれ環境変数の値に置き換えられます。

' (シングルクォーテーション)の中で使用する → NG

upload_max_filesize = '${PHP_UPLOAD_MAX_FILESIZE}'
; => 環境変数として展開されない!

右辺を ' ~ ' で囲ったときは使用できません。 この例ではそのまま ${PHP_UPLOAD_MAX_FILESIZE} という文字列として認識されてしまいます。

{ } (波括弧)をつけずに使用する → NG

upload_max_filesize = $PHP_UPLOAD_MAX_FILESIZE
; => 環境変数として展開されない!

変数名は {} で囲わないと環境変数として認識されません。 この例ではそのまま $PHP_UPLOAD_MAX_FILESIZE という文字列として認識されてしまいます。

なお、 ${NAME} という記法は php.ini 内で宣言済みの変数を参照するためにも使えるので、意図しない名前の衝突に注意しなくてはなりません。

It is possible to refer to existing .ini variables from within .ini files. Example: open_basedir = ${open_basedir} ":/new/dir".

参考


アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら