2

私は、スクリプトが Linux で実行されるプロジェクトで作業しています。C++ で記述された多くのモジュールがあります。これらのモジュールを PHP から呼び出す必要があります。

私の問題は次のとおりです。

  1. 私のモジュールは、ソフトウェア パッケージ内のモジュールの 1 つです。
  2. 私たちのソフトウェアには、ユーザー入力を取得してデータベースに保存し、必要に応じて C++ エンジンを呼び出す PHP レイヤーがあります。
  3. すべてのモジュールが実行されており、基本モジュールによって設定された環境変数を使用しています。
  4. C++ エンジンへのユーザー入力を取得するための PHP のレイヤーが 1 つあります。
  5. PHP からアプリケーション (abc.out) を呼び出す必要があり、データベースがいっぱいになります。

問題は、アプリケーションが機能する前に、1 つの新しい環境変数を設定する必要があることです。

getenv()パスを追加して再度設定することで、古い環境変数を取得しています。putenv()新しい環境変数を設定するために使用しました。

環境変数を設定した後system()、PHP からそのアプリケーションを呼び出すために使用していますが、動作しています。

この環境変数の変更が、実行中の他のモジュールに影響を与えるかどうかは疑問です。

1 つのことは、system()複数の操作に使用する場合、環境変数を設定し、同じ呼び出しからアプリケーションを呼び出すことができるということですsystem()。ここで私の疑問は、これが実行中の他のアプリケーションにも影響するのか、それとも で呼び出される特定のアプリケーションだけに影響するのかということsystem()です。

それはsystem()、プログラムごとに新しいセッションを作成することです。

ありがとう

4

1 に答える 1

2

まあ、php はオープン ソースです :-) ファイルext/standard/exec.cを調べる必要があります。system は php_exec_ex への呼び出しとして実装され、php_exec を介してVCWD_POPENというマクロを使用します。これは、Linux システムではpopen()システム コールを使用します。

そのため、Linux システムでのPHP system()への各呼び出しは、新しいpopen()システム コールを介して実行されるため、そうです、個別の呼び出しは分離されています。私はWindowsをチェックしませんでした。

于 2012-07-19T12:49:28.333 に答える