15

コマンドラインからPHPスクリプトを実行する必要があり、いくつかの環境変数を設定する必要があります。残念ながら、次は動作しません:コマンドラインスクリプトの実行中にPHP環境変数を設定する

php -dAPPLICATION_ENV=staging script.php 

APPLICATION_ENV変数セットを持っている私は何を達成したいと思います。

+0

は-dとAPPLICATION_ENVタイプミスとの間のスペースであります? putenv( "APPLICATION_ENV = staging")を入れてみてください。 in script.php – Tdelang

+0

スクリプト内からいくつかの変数を設定するか、スクリプト内から環境変数にアクセスする必要がありますか?後者の場合は、アクセスするためにどのコードを使用していましたか? – DaveRandom

+0

スクリプト変数は 'getenv()'関数で取り出されます。 – Wiktor

答えて

21
APPLICATION_ENV=staging php script.php 

変数に$ _SERVER配列に利用できるようになります:あなたは、コマンドラインからPHPスクリプトを実行すると

echo $_SERVER['APPLICATION_ENV']; 
5

、それはあなたのシェルで定義された環境変数を継承します。 PHPバイナリにオプションを渡すことで、スクリプトの実行のために特別にコマンドラインから環境変数を設定する方法はありません

export APPLICATION_ENV='staging' 
+0

私は知っている、私はちょうど何とかスクリプトを変更したくない。 – Wiktor

+0

編集済みの回答を参照... – ciruvan

8

:それはあなたがそうのようにexportコマンドを使用して環境変数を設定できることを意味します。

あなたはいくつかのオプションがあります:システム上でグローバル変数を設定し

  1. を。
  2. スクリプトを呼び出す前に、コマンドラインで変数を設定します。これは、あなたのスクリプトが実行を終了した後、あなたが望むかもしれない環境の中で持続します。
  3. 別のスクリプトでPHPスクリプトをラップすると、スクリプトの実行中のみ存在する一時変数を作成できます。
  4. 環境変数の代わりにコマンドラインオプションを使用します。

作成する変数は、スクリプトの実行時にのみ存在するという点で、おそらく最も簡単な方法です。

オプション1の実装はシステムによって異なります。

オプション2の実装もシステムに依存します.Windowsではset APPLICATION_ENV=staging&& php script.phpとなり、* nixではexport APPLICATION_ENV='staging' && php script.phpとなります。

オプション3に行く場合は、シェルスクリプトに行こうと思うかもしれませんが、移植性がありません(Windowsの場合はバッチファイル、* nix環境の場合はシェルスクリプトが必要です)

<?php 

    putenv('APPLICATION_ENV=staging'); 

    include('script.php'); 

これは、あなたがそのままあなたのターゲットスクリプトを残し、スクリプトのみのセッションのための環境変数を設定することができます

より複雑なラッパースクリプト:Dあなたは、このような何かを、単純なPHPラッパースクリプトを書く示唆しますコマンドラインで変数を指定したり、スクリプトを動的に指定したりすることもできますこれらの変数が設定されているときに実行されるはずのt。

オプション4は変数を使用して実装することができます。

<?php 

    $applicationEnv = $argv[1]; 

    // rest of you script 

...しかし、あなたが環境(ステージング、DEV、ライブなど)で実行されているスクリプトに示しているように見えることを私に発生し

php script.php staging 

- その場合、それを中:などのスクリプトを呼び出しますサーバ全体の変数を設定し、他のアプリケーションが設定しているかもしれない変数との衝突を防ぐために必要に応じて名前を変更するのが最も簡単かもしれません。そうすれば、スクリプトを呼び出すだけで、これを心配する必要はありません。これは、あなたがステージング環境が別のマシン上で実行されていることを前提としています。

2

のputenvを使って試してみて、パラメータ

php script.php APPLICATION_ENV=staging 

そしてscript.phpコードで

て変数を渡す:あなたは FOO="bar"よう /etc/environmentで変数を設定することができ

for($i=1;$i<count($argv);$i++){ 
    putenv($argv[$i]); 
} 
5

のgetenvとその後、アクセス可能ですCLIとWeb要求の両方で()を使用します。この変更を有効にするには、再ログオンする必要があります。

+0

+1「この変更を有効にするには[in]を再配置する必要があるかもしれません。私はこのコメントを見るまで、なぜ私の '/ etc/environment'の内容がうまくいかないのか疑問に思って壁に頭を打ちました。 –

1

私は同じような状況を持っていると私は、次のコード(それは私のために動作します)を使用します。

export APPLICATION_ENV=staging && php script.php 

は、それはあまりにもあなたのために役立つことを願っています。ここで

3

は1つのenvirnnomental変数を設定するための例です:

ENV_VAR='var' php script.php 

あなたは複数の変数を設定したいだけの場合には これを試してみてください:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 
関連する問題