28

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

php -dAPPLICATION_ENV=staging script.php

私が達成したいのは、APPLICATION_ENV変数を設定することです。

4

7 に答える 7

42
APPLICATION_ENV=staging php script.php

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

echo $_SERVER['APPLICATION_ENV'];
于 2013-08-07T08:21:36.583 に答える
16

オプションを 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');

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

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

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

<?php

    $applicationEnv = $argv[1];

    // rest of you script

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

php script.php staging

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

于 2013-08-07T08:44:50.987 に答える
6

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

于 2015-07-07T21:55:16.937 に答える
2

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

php script.php APPLICATION_ENV=staging

そしてscript.phpコードでは:

for($i=1;$i<count($argv);$i++){
     putenv($argv[$i]);
}
于 2013-08-07T08:45:52.510 に答える
1

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

export APPLICATION_ENV=staging && php script.php

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

于 2017-01-05T17:23:43.133 に答える