🔧

php $_SERVER 値の設定

2023/09/14に公開

伝統的にphpにはsuper global変数がある。この値は実行環境によって設定される。いくつかあるスーパーグローバル変数のうち $_SERVER は、この実行環境が責任をもって設定する変数領域となっている。

内部的には SAPI の枠組みで設定される。コードを読む上で大混乱を引き起こすのは「env」「環境変数」という用語。OS のプロセス実行環境の管理下にある「環境変数」と、php 実行環境が php スクリプトを実行する環境管理下にある「環境変数」の二つが存在する。前者の OS が管理する変数は $_ENV であり、後者の変数が $_SERVER である。

php を apache handler module で実行する際は、Apache の「環境変数」も意識することになる。こちらも同様に二つ存在する。ドキュメントにある設定項目は、後者のApacheが管理する環境変数になっている。php apache handler module では、この Apache 環境変数を $_SERVER に設定している。具体的にはこの部分

つまり php apache docker で $_SERVER に値を設定したいときは、Apache SetEnv で値を設定することになる。

Dockerfile
FROM php:7.4.33-apache
COPY https.conf /etc/apache2/sites-enabled/https_env.conf
https_env.conf
SetEnv HTTPS on

Discussion