使用MAMP + MAMP Pro 3.5进行本地开发。使用envvars
文件,我提供自己的PATH,这与任何其他用户或目的的PATH不同。让我们假装它是/my/unique/custom/path
。
我将以下文件放在我的本地开发网站上:
<ol>
<li><?php print $_SERVER['PATH']; ?></li>
<li><?php print $_ENV['PATH']; ?></li>
<li><?php print exec('echo $PATH'); ?></li>
</ol>
这就是结果:
- /我的/独特/定制/路径
- /我的/独特/定制/路径
- 的/ usr / GNU / bin中:在/ usr / local / bin中:/ bin中:在/ usr / bin中:
醇>
因此,PHP认为PATH环境变量应该是我的,但不知何故它不是实际用于运行命令的那个。
可能导致这种情况的原因是什么?显然#3 PATH是bash的默认路径,如果你没有设置,我想?什么可能导致它被删除或从未设置,因为PHP正确看到它?
更新1:
正在运行print_r(shell_exec('env'))
让我这样,仅此而已:
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
PHP_FCGI_CHILDREN=4
PWD=/path/to/website/files
SHLVL=1
PHP_FCGI_MAX_REQUESTS=200
_=/usr/bin/env
非常裸露。好像$ _变量是一个很大的线索,但我还不知道是什么。
更新2:
好的,结果是裸露的环境是正常的。这就是您首先在envvars
中设置环境变量的原因。但envvars
显然正在发挥作用,否则该路径不会出现在$_SERVER
中。因此,在envvars
运行的时间和运行自己的代码的时间之间发生了一些事情。
答案 0 :(得分:1)
罪魁祸首最终成为FastCGI。默认情况下,它会清除PHP脚本中的所有环境变量。安全功能,我想。
使用MAMP,无法在全球范围内关闭clear_env
设置。但是,如果您编辑相应的/Applications/MAMP/fcgi-bin/phpX.Y.Z.fcgi
文件,则可以添加如下所示的行:
export PATH='/my/unique/custom/path'
......而且你正在做生意。
确保在上面添加上面的行以exec
开头的文件中的最后一行。