【PHP】putenvで上書きした環境変数の取得方法

putenvで設定した環境変数をgetenvで取得しようとした時にで「取れない。。」となったので、メモとして残しておきます。



そもそもgetenv・putenvとは?

本題に入る前にgetenvとputenvについて軽くおさらいしておきます。

getenv

getenvはサーバーに設定された環境変数を取得できます。
下記の例ではデフォルトで設定されているDOCUMENT ROOTを取得します。

echo getenv('DOCUMENT_ROOT'); // 出力:/home/hoge1234/hoge.com/public_html/

putenv

putenvは環境変数をリクエスト内でのみ上書きします。
下記の例ではDOCUMENT ROOTを上書きしています。

putenv("DOCUMENT_ROOT=/home/hoge1234/hoge.com/public_html/foo"); // ドキュメントルートを上書き




putenvした値がgetenvで取得できない?

putenvは環境変数を上書きするのだから、getenv(‘環境変数名’)で取れるような気がするのですが、取れません。下記のように、2行目でputenvした値が3行目のgetenvに反映されていません。

echo getenv('DOCUMENT_ROOT'); // 出力:/home/hoge1234/hoge.com/public_html/
putenv("DOCUMENT_ROOT=/home/hoge1234/hoge.com/public_html/foo");
echo getenv('DOCUMENT_ROOT'); // 出力:/home/hoge1234/hoge.com/public_html/




putenvした環境変数の取得方法

putenvで上書きした環境変数を取得するにはgetenv(‘環境変数名’,true)という形で第二引数にtrueを渡してやります。
4行目で上書きした環境変数が取れています!

echo getenv('DOCUMENT_ROOT');      // 出力:/home/hoge1234/hoge.com/public_html/
putenv("DOCUMENT_ROOT=/home/hoge1234/hoge.com/public_html/foo");
echo getenv('DOCUMENT_ROOT');      // 出力:/home/hoge1234/hoge.com/public_html/
echo getenv('DOCUMENT_ROOT',true); // 出力:/home/hoge1234/hoge.com/public_html/foo




以上、putenvで上書きした環境変数の取得方法でした。

コメント

タイトルとURLをコピーしました