PHP 环境变量转移到子进程中

标签 php laravel child-process

我在使用环境变量的 PHP 中遇到问题,并使用 system()exec() 等函数调用其中的其他 PHP 脚本。来自父进程的环境变量被转移到子进程中。例如,假设我有 foo.php,其中包含:

<?php
putenv('FOO=BAR');
system('php ./yap.php');

在同一个文件夹中,我有 yap.php,其中包含:

<?php
echo "Yap sez " . getenv('FOO') . "\n";

如果我运行 php foo.php,我得到这个:

Yap sez BAR

这不应该!在现实生活中 (Laravel),两个脚本都需要将环境变量设置为不同值,但子进程看不到自己的值,因为父进程的值优先。我怎样才能避免这个问题并在两个脚本中仍然对环境变量使用相同的名称?

最佳答案

在子命令之前加上 env -i 就可以了。所以 foo.php 看起来像这样:

<?php
putenv('FOO=BAR');
system('env -i php ./yap.php');

这有效地从 child 的上下文中清除了环境变量。输出现在看起来像:

Yap sez 

作为引用,env -i 标志(无论如何在 OSX El Capitan 上)的手册页描述说:

Execute the utility with only those environment variables specified by name=value options. The environment inherited by env is ignored completely.

关于PHP 环境变量转移到子进程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33559593/

相关文章:

php - 动态更改 div 值,laravel blade 上的导航栏

php - Laravel 双重验证正则表达式不起作用

php - 过滤特定列,如果匹配则获取记录

c - 如何在 C 编程中执行 Shell 脚本,接收反馈和处理器 ID,并关闭进程

php - 选择用 pdo 获得的数组的一列的一个值

php - 为mysql textarea添加换行符

php - 关键字相关性 PHP MySQL 搜索引擎

php - 将 PHP 爆炸字符串转换为 AS3

node.js - 检查是否全局安装了特定的 NPM 包

命令行应用程序 : How to attach a child process to xcode debugger?