PHPスクリプトをコマンドラインから実行する必要があり、いくつかの環境変数を設定する必要があります。残念ながら、以下は機能しません。
php -dAPPLICATION_ENV=staging script.php
私が達成したいのは、APPLICATION_ENV
変数セット。
APPLICATION_ENV=staging php script.php
変数は$ _SERVER配列で使用できます。
echo $_SERVER['APPLICATION_ENV'];
PHPバイナリにオプションを渡すことにより、スクリプトの実行専用にコマンドラインから環境変数を設定する方法はありません。
いくつかのオプションがあります。
最後の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
しかし、あなたはスクリプトにどの環境で実行されているか(ステージング、開発、ライブなど)を示しているように見えることがあります。この場合、サーバー全体の変数を設定し、必要に応じて名前を変更するのが最も簡単です。他のアプリケーションが設定している可能性のある変数との衝突を防ぐため。そうすれば、スクリプトを呼び出すだけでよく、これを心配する必要はありません。これは、ステージング環境がライブとは別のマシンで実行されていることを前提としています(そうでなければなりません)。
PHPスクリプトをコマンドラインから実行すると、シェルで定義された環境変数を継承します。つまり、次のようにexportコマンドを使用して環境変数を設定できます。
export APPLICATION_ENV='staging'
以下は、1つの環境変数を設定する例です。
ENV_VAR='var' php script.php
複数の変数を設定したい場合に備えて、これを試してください:
ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php
/etc/environment
のようにFOO="bar"
に変数を設定できます。この変数は、CLIリクエストとWebリクエストの両方でgetenv()を使用してアクセスできます。この変更を有効にするには、再ログが必要になる場合があります。
Putenvを使用して、パラメータを介して変数を渡します
php script.php APPLICATION_ENV=staging
そしてscript.phpコードで:
for($i=1;$i<count($argv);$i++){
putenv($argv[$i]);
}
私は同じ状況にあり、次のコードを使用します(私にとってはうまくいきます):
export APPLICATION_ENV=staging && php script.php
それがあなたにも役立つことを願っています。