web-dev-qa-db-ja.com

PHPのグローバル環境変数を設定する方法

私は質問/回答を読みました こちら ですが、/ etc/environmentで変数を設定する方法がわかりません。ファイルを編集する場合、マシンを再起動する必要がありますか、それとも単に現在のユーザーをログアウトする(または新しいユーザーにログインする)必要がありますか?.

グローバル変数を設定して、マシン上のWebサイトが「開発」モードまたは「テスト」モードであることを示します。すべてのプロジェクトでこれを設定する必要はありません(PHP、Java/Tomcat、NodeJSなどを使用するかどうか)。 (Apacheの場合)次の方法で環境変数を設定できることを認識しています。

  1. putenv()を使用してphpから直接(これは、ファイルがどのサーバーにあるかを把握しようとするロジックを避けたいため、役に立たないようです)
  2. .htaccessを使用SetEnv ENVIRONMENT 'local'(これはすべてのサーバーでこのファイル/コードを複製する必要がありますが、理想的ではありません)
  3. 仮想ホストディレクティブを使用するSetEnv ENVIRONMENT 'local'(仮想ホストを使用している場合、これはほとんどすべての場合に使用されますが、何度も何度もコードをコピー/貼り付けする必要があります)
  4. httpd-conf SetEnv ENVIRONMENT 'local'(これはApacheにのみ適用され、NodeJSサーバーにも適用したいです)

#4ができない(とNodeJSサーバーに#3を選択的に適用できない)とは言っていません。しかし、これが/ etc/environmentを使用する正当な理由だと考えています。上で言ったように、ファイルを編集し(最初に作成した後)、次の組み合わせを試しましたが、どれも機能していないようです:

ENVIRONMENT='local'
ENVIRONMENT=local
export ENVIRONMENT='local'
export ENVIRONMENT=local

私は、出力から変数を見つけられなかったため、どれも機能しなかったと言います:

print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));
21
alyda

やりたいことは、Apache構成ファイルを使用することです。構成フォルダーとhttpd.confファイル(または変更されたバージョン)にアクセスする必要があります。その後、このアプローチを使用してhttpd.confを構成し、構成ファイルを動的にロードできます。

Include conf.d/*.conf

Conf.dフォルダー内に、特定の環境構成ファイルを配置します。

server-environment-dev.confの例:

SetEnv ENVIRONMENT "local"

server-environment-prod.confの例:

SetEnv ENVIRONMENT "production"

これらの設定は、使用可能な環境変数としてphpコードに表示されます。このアプローチにより、vhostファイル、.htaccess、およびその他の環境に依存しない構成ファイルを保持できます。

etc/environment、etc/profile.d、.bash_profile、.profileなどのファイルは、プロセス/ユーザーの制限により、ApacheでPHPによって読み取りできません。bash、スマッシュ、クラッシュすることができます必要な変数はすべて端末で設定されますが、Apache構成ファイルのいずれかで設定しない限り、phpinfo()には表示されません。

NodeJSの場合は、環境変数を渡してアプリを起動するか、ユーザーに依存しないようにするには、.bash_profileファイルと場合によってはetc/environmentファイルを含む複数の方法でNODE_ENVを設定できます。

Nodeの良い読み物: http://www.hacksparrow.com/running-express-js-in-production-mode.html

42
nopuck4you

したがって、どこかにグローバル構成ファイルがあると仮定します。変更できるファイルに定数を入れてみませんか?サーバーレベルで何かを設定しようとする方がはるかに簡単です。

define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
   echo 'We\'re just testing';
}
1
Machavity

それでも環境変数を取得できない場合:

real httpd.confを編集する必要があるかもしれません

〜/ライブラリ/ Application Support/appsolute/MAMP PRO /

の代わりに

/ Applications/MAMP/conf/Apache /

また、$ _ ENVの代わりにgetenv()を使用する必要があるかもしれません

0
Sebastien Horin