1

Apaches VirtualHost Container 内で変数を設定する方法は次のとおりです

SetEnv MY_VAR "/opt/"

これで、PHP はこの変数に完全にアクセスできます。

echo $_SERVER['MY_VAR'];
/opt/

ただし、PHP コードからシェル スクリプトを呼び出すと、

passthru('/path/to/myscript');

MY_VAR内は空です/path/to/myscript

ただし、このように呼び出しを変更すると、機能します。

passthru('export MY_VAR='. $_SERVER['MY_VAR'] .'; /path/to/myscript');

すべての環境変数をシェル スクリプトに渡すより良い方法はありますか? 複数渡す必要があるので。

system()exec() 、バックティック、shell_exec()も試しました。それらはすべてpassthru()と同じ動作を示します。

4

4 に答える 4

1

最初のページでphpinfo()を使用すると、環境変数(MY_VAR)が[環境]ボックスではなく、[Apache環境](使用するWebサーバーの場合)に表示されます。

したがって、「getenv」は環境からだけでなく、パススルーで何かを起動するときに継承されないApache環境からも値を取得するようです。

passthruによって実行されるスクリプトでは、envのみが表示されます。「環境」ボックスにリストされている変数なので、一貫性があります。

したがって、パススルースクリプトにエクスポートする変数ごとに、次を使用する必要があります。

putenv('MY_VAR ='.apache_getenv('MY_VAR'));

配列とforループで簡単に実行できます。

于 2012-02-09T13:38:44.367 に答える
1

環境値を使用putenv("MY_VAR=test");すると、呼び出されたシェル コマンドに渡されます。(ただし、入れられません$_ENV

だから、あなたは単に次のようなことをすることができます

foreach ( $_SERVER as $k=>$v ) putenv("$k=$v");
于 2012-02-09T13:31:31.770 に答える
1

proc_openを試してください。

proc_open('/path/to/myscript', $descriptorspec, $pipes, null, $_SERVER);

オプションとして、環境変数を含む配列を渡すことができます。

于 2012-02-09T13:26:27.590 に答える
0

SetEnv を呼び出すと、現在のシェル環境を変更しているためだと思います。その後 passthru を呼び出すと、既存の env がエクスポートされていない変数とともに破棄され、「新しい」環境が /path/to/myscript に与えられます。

/path/to/myscript -MY_VAR=/opt へのパラメーターとして、代わりにコマンドラインで環境変数を渡すことはできますか?

于 2012-02-09T13:23:12.223 に答える