2

我正在一个项目中工作,脚本将在 Linux 下运行。它有许多用 C++ 编写的模块。我需要从 PHP 调用这些模块。

我的问题如下:

  1. 我的模块是软件包中的模块之一。
  2. 我们的软件有 PHP 层来获取用户输入并将其存储在数据库中,并在需要时调用 C++ 引擎。
  3. 所有模块都在运行并使用一些由基本模块设置的环境变量。
  4. 通过我们获取 C++ 引擎的用户输入,有一层 PHP。
  5. 我需要从 PHP 调用一个应用程序(abc.out),它将填充数据库。

问题是我必须在应用程序运行之前设置一个新的环境变量。

我正在使用旧的环境变量,getenv()然后将路径附加到它并再次设置。我习惯于putenv()设置新的环境变量。

设置环境变量后,我使用system()从 PHP 调用该应用程序并且它正在工作。

我怀疑此环境变量更改是否会影响正在运行的其他模块。

一件事是,如果我们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 回答