php - 为什么 putenv() 有效但 export 无效?

标签 php linux

在 php 中,运行:

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

导致空白输出。好像没有设置环境变量,但是导出命令也没有报错。但是,这有效:

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

结果:

http_proxy=http://myproxy.com:8080

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

最佳答案

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

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

关于php - 为什么 putenv() 有效但 export 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42195076/

相关文章:

php - Yii2:根据相关表中的另一个字段自动填充字段

c - 如何从 struct addrinfo 获取我自己的 IP 地址

mysql - 使用 linux 提示符在 mysql 数据库上进行选择,该数据库显示没有表图形表示的值

php - 如果没有插入,则限制第二个和第三个 sql

php - DB_DataObject 和 PDO

php - Symfony2 表单子(monad)项和错误

android - VirtualBox Linux 无法挂载安卓设备

linux - Linux Shell Scripts如何判断今天是星期天?

linux - Linux 上的 OpenGL 4.4

php - Cakephp 3.x - 国际化整页