MAMP:环境变量在 envvars 和运行时之间 deleted/replaced

MAMP: Environment variables being deleted/replaced between envvars and runtime

使用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>

这是结果:

  1. /my/unique/custom/path
  2. /my/unique/custom/path
  3. /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 是 运行 和我 运行 我自己的代码之间发生了一些事情。

这里的罪魁祸首最终是 FastCGI。默认情况下,它会清除 PHP 脚本中的所有环境变量。我猜是安全功能。

使用 MAMP,无法在全球范围内关闭 clear_env 设置。但是如果你编辑合适的 /Applications/MAMP/fcgi-bin/phpX.Y.Z.fcgi 文件,你可以像这样添加一行:

export PATH='/my/unique/custom/path'

...你在做生意。

确保在文件中以 exec.

开头的最后一行 上方 添加该行