从php看system()函数是如何工作的


From php how the system() function is working?

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

我的问题如下:

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

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

我使用getenv()获取旧的环境变量,然后为其添加一个路径并再次设置。我已经使用putenv()来设置新的环境变量。

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

我怀疑这个环境变量的变化是否会影响其他正在运行的模块。

一件事是,如果我们将system()用于多个操作,我可以设置环境变量并从同一个system()调用调用我的应用程序。在这里,我怀疑这是否也会影响正在运行的其他应用程序,或者只影响使用system()调用的特定应用程序。

也就是说,system()是为每个程序创建一个新的会话吗?

感谢

好吧,php是开源的:-)你需要在文件ext/standard/exec.c.中查看。系统被实现为对php_exec_ex的调用,它通过php_exec使用一个名为VCWD_POPEN的宏,该宏在Linux系统上使用POPEN()系统调用。

因此,Linux系统上对PHP system()的每次调用都将通过一个新的popen()系统调用来执行,因此,是的,单独的调用是孤立的。我没有检查Windows。