5

私は通常、このようにLinuxのbashターミナルで*.shファイルを入手します。

. ./myscript.sh

コマンドラインPHPスクリプトを実行する前に、PHPの$_SERVERスーパーグローバルを使用してエクスポートされた環境変数にアクセスできるようにします。

PHPスクリプト自体からshファイルを入手して、エクスポートする変数にアクセスすることは可能ですか?

私はあらゆる種類の試みをしましたが、成功しませんでした。私はもう試した

system('. ./myscript.sh')
system('sh ./myscript.sh')

exec('. ./myscript.sh')
exec('sh ./myscript.sh')

shell_exec('. ./myscript.sh')
shell_exec('sh ./myscript.sh')

これらを使用すると、エクスポートされた変数は$_SERVERに表示されません。

何か案は?

4

3 に答える 3

4

変数が存在していたシェルが終了したため、変数を使用できません。その変数を取得するには、同じシェル内から PHP を実行する必要があります。

変数を設定した後、myscript.sh を編集して PHP スクリプトを起動します。

export VAR1=1
export VAR2=2
php -f /path/to/script.php

または、ファイルをソースとして、同じシェルから PHP を起動する別のラッパー スクリプトを作成します。

. ./myscript.sh
php -f /path/to/script.php

編集: または、次のようにスクリプトを実行します。

. ./myscript.sh && php -f /path/to/script.php
于 2012-04-24T17:32:22.627 に答える
1

まず第一に、コマンドライン php スクリプトを作成している場合、$_SERVER 配列で得られる環境変数の数がわかりません。

getenv()次の関数を使用してみてください: http://www.php.net/manual/en/function.getenv.php

また、あなたのファイルをソースするために、やってみましたか?:

exec('source ./myscript.sh')

それが役立つかどうか教えてください!

于 2012-04-24T17:33:11.890 に答える
1

などのシェルにファイルをソースするbashには、シェルが実行されている必要があり、シェルはそのファイルを読み取って解釈するだけです。シェル コマンド ラインから実行phpすると、環境を継承する別のプロセスがフォークされます。そのプロセスが終了すると、環境を含む実行可能ファイルのメモリ フットプリントが破棄されます。

PHPスクリプトを実行することに関しては、同じことを行います-たとえば、別のプロセスを作成し、そのbashプロセスを取得してスクリプトを読み取り、解釈し、コマンドを文字どおりに実行し、プロセスが終了するとプロセスを終了します行った環境上の変更とともに終了します。

したがって、これに対する可能な解決策は、次のことです。

  1. PHP スクリプトは、ファイル システム内の場所を特定する必要があります。
  2. PHP スクリプトは、自分自身を呼び出しているかどうかを判断する必要があります。
  3. スクリプトが自分自身を呼び出していない場合は、bash スクリプトを実行して環境をセットアップし、追加の環境変数を追加して、このルートを再び下らないように決定し、itselt を実行できるようにします。おそらく、コマンドpopenに発砲するようなものを使用します, ,bashsourceexportexec php
  4. スクリプトが自分自身を呼び出している場合は、実行するだけです

面倒くさそうです。スクリプトを作成して環境をセットアップし、PHP を起動するだけです。

于 2012-04-24T17:59:45.840 に答える