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で上書きした環境変数の取得方法でした。
コメント