我正在尝试PATH
在 PHP 中设置环境变量,但遇到了一些意外行为:
var_dump(getenv('PATH'));
system('echo $PATH');
system('which true 2>&1');
system('PATH="$PATH" which true 2>&1');
结果是
string(23) "/usr/local/bin:/usr/bin"
/usr/local/bin:/usr/bin
which: no true in ((null))
/usr/bin/true
所选的可执行文件也反映了这一点,这些可执行文件来自/usr/bin
而不是/usr/local/bin
.
我的目标是(显然)更改脚本期间调用的某些可执行文件的路径。但是我不能直接更改我想要更改其路径的可执行文件的路径,因为它是由一些二进制文件间接调用的。我也不能简单地使用该PATH="$PATH"
变体而不修补外部库。
因为明显的解决方法不适用,而且我觉得这很好奇,所以我想解释一下为什么会发生这种情况以及如何(或是否)可以以传递给system
或exec
调用的方式设置 PATH。
该脚本通过 php-fpm 运行,以防此处感兴趣。