0

我正在尝试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"变体而不修补外部库。

因为明显的解决方法不适用,而且我觉得这很好奇,所以我想解释一下为什么会发生这种情况以及如何(或是否)可以以传递给systemexec调用的方式设置 PATH。

该脚本通过 php-fpm 运行,以防此处感兴趣。

4

0 回答 0