为什么putenv()有效但导出不起作用?

时间:2017-02-13 00:51:08

标签: php linux

在php中,运行:

echo shell_exec("export http_proxy=http://myproxy.com:8080 2>&1");
echo shell_exec("env | grep proxy");

结果为空白输出。似乎未设置环境变量,但export命令也不会产生任何错误。但是,这有效:

putenv("http_proxy=http://myproxy.com:8080");
echo shell_exec("env | grep proxy");

结果:

http_proxy=http://myproxy.com:8080

为什么出口不起作用?导出完成后环境变量是否未设置?或者这是某种安全设置?操作系统是CentOS 7。

1 个答案:

答案 0 :(得分:2)

每个shell_exec调用都在自己的shell子进程中运行。一次调用中对环境的更改不会持久保存到另一次调用中。 (进程无法修改其父级或兄弟级的环境)。

另一方面,

putenv修改当前(PHP)进程的环境,然后由所有shell_exec子进程继承。