我试图在PHP中设置PATH
环境变量并遇到一些意外行为:
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"
变体而无需修补外部库。
因为明显的解决方法并不适用,而且因为我觉得这很奇怪,我想解释为什么会发生这种情况以及如何(或者如果)可以设置PATH的方式传递给system
或exec
来电。
脚本是通过php-fpm运行的,如果感兴趣的话。