web-dev-qa-db-ja.com

コマンドラインスクリプトの実行中にPHP環境変数を設定する

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

php -dAPPLICATION_ENV=staging script.php

私が達成したいのは、APPLICATION_ENV変数セット。

23
Wiktor
APPLICATION_ENV=staging php script.php

変数は$ _SERVER配列で使用できます。

echo $_SERVER['APPLICATION_ENV'];
30
Marek

PHPバイナリにオプションを渡すことにより、スクリプトの実行専用にコマンドラインから環境変数を設定する方法はありません。

いくつかのオプションがあります。

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

最後の2つのオプションは、作成された変数がスクリプトの実行時にのみ存在するという点で、おそらくこれを行う最もクリーンな方法です。

オプション1の実装はシステムに依存します。

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

オプション3を使用する場合、シェルスクリプトを使用したくなるかもしれませんが、これは移植性がありません(Windows用のバッチファイルと* nix環境用のシェルスクリプトが必要です。代わりに、次のように書くことをお勧めします。単純なPHPラッパースクリプト、次のようなもの:

<?php

    putenv('APPLICATION_ENV=staging');

    include('script.php');

これにより、ターゲットスクリプトを変更せずに、スクリプトのセッションのみに環境変数を設定できます。

より複雑なラッパースクリプトを簡単に作成して、コマンドラインで変数を指定したり、これらの変数が設定されたときに実行するスクリプトを動的に指定したりすることもできます。

オプション4は、$argv変数を使用して実装できます。

<?php

    $applicationEnv = $argv[1];

    // rest of you script

...次のようにスクリプトを呼び出します。

php script.php staging

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

13
DaveRandom

PHPスクリプトをコマンドラインから実行すると、シェルで定義された環境変数を継承します。つまり、次のようにexportコマンドを使用して環境変数を設定できます。

export APPLICATION_ENV='staging'
10
ciruvan

以下は、1つの環境変数を設定する例です。

ENV_VAR='var' php script.php 

複数の変数を設定したい場合に備えて、これを試してください:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 
8
Abdou Tahiri

/etc/environmentのようにFOO="bar"に変数を設定できます。この変数は、CLIリクエストとWebリクエストの両方でgetenv()を使用してアクセスできます。この変更を有効にするには、再ログが必要になる場合があります。

6
Westwick

Putenvを使用して、パラメータを介して変数を渡します

php script.php APPLICATION_ENV=staging

そしてscript.phpコードで:

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

私は同じ状況にあり、次のコードを使用します(私にとってはうまくいきます):

export APPLICATION_ENV=staging && php script.php

それがあなたにも役立つことを願っています。

1
V. Kovpak