【发布时间】:2012-06-30 15:27:29
【问题描述】:
我假设 MAMP 环境变量可以在 ~/.bash_profile 中设置,但似乎在那里设置它们并不总是立即生效。例如,我只是在我的 .bash_profile 中设置了一个变量,并尝试重新启动 MAMP 服务器、重新启动 MAMP 本身,甚至注销我的计算机,但似乎没有任何效果。在我的环境中仍然无法访问该变量。是否有另一种方法来设置我缺少的 MAMP 环境变量,或者是否有需要清除的缓存?
提前致谢。
【问题讨论】:
我假设 MAMP 环境变量可以在 ~/.bash_profile 中设置,但似乎在那里设置它们并不总是立即生效。例如,我只是在我的 .bash_profile 中设置了一个变量,并尝试重新启动 MAMP 服务器、重新启动 MAMP 本身,甚至注销我的计算机,但似乎没有任何效果。在我的环境中仍然无法访问该变量。是否有另一种方法来设置我缺少的 MAMP 环境变量,或者是否有需要清除的缓存?
提前致谢。
【问题讨论】:
您还可以在主机设置面板的扩展选项卡中的additional parameters for <VirtualHost>: 部分中设置 MAMP Pro(MAMP 中不可用)中的 PHP 环境变量。
屏幕截图来自 MAMP Pro v 3.0.3
【讨论】:
MAMP 将在启动 apache 时将/Applications/MAMP/Library/bin/envvars 的内容加载到其环境变量中。所以你可以编辑文件并添加:
MY_VAR="foo"
export MY_VAR
然后像这样访问该变量:
echo $_ENV["MY_VAR"];
打印:
foo
OSX Yosemite 更新:
将envvars 重命名为_envvars
见:MAMP Pro 3.05 on Mavericks updated to Yosemite - Apache does not start
【讨论】:
envvars_ 和 envvars-std 在每次更改后重新启动 MAMP。有没有我可以深入研究的配置文件来查看它的加载位置?是否有任何其他先决条件才能起作用?我希望在我的所有主机上添加一些 ENV,这使得这个解决方案比下面的每个主机更有吸引力。
apachectl 脚本,您可以阅读该源代码以找到答案。在我的情况下,正确 envvars 文件的路径位于 # pick up any necessary environment variables 的注释下
SetEnv 方法有效,但就像我说的,我想在我的所有主机上定义变量,而不是为每个主机定义它们。
envvars 文件不适合你,SetEnv 可能就是你需要的。但是您可能想在此处阅读有关该答案的更多详细信息:httpd.apache.org/docs/2.2/env.html
envvars。 $ cat /Applications/MAMP/Library/bin/apachectl | grep envvars 在我的例子中它的 /Applications/MAMP/Library/bin/envvars,它不存在,所以我创建了它:vim /Applications/MAMP/Library/bin/envvars。 /Applications/MAMP/Library/bin/envars_ 中查找语法示例。
您可以在 Apache 配置中设置环境变量...
/Applications/MAMP/conf/apache/httpd.conf
SetEnv MY_VAR theValue
SetEnv ANOTHER thisIsTheValue
【讨论】:
MAMP 正在寻找“/Applications/MAMP/Library/bin/envvars”,如果该文件没有,只需创建它并添加您的环境变量。
【讨论】:
echo 'export KEY=VALUE' >> /Applications/MAMP/Library/bin/envvars
我假设你说的是本地服务器?
我注意到,如果您查看 apache 可以运行多个实例的进程,您可能需要检查这些进程。如果是,请单独退出它们,因为在重新启动所有实例之前,重新启动不会接受新的更改。有什么可以尝试的。
【讨论】:
如果您仍然无法获取环境变量:
您可能需要在 real httpd.conf 中编辑
~/库/应用程序支持/appsolute/MAMP PRO/
而不是
/Applications/MAMP/conf/apache/
您可能还需要使用 getenv() 而不是 $_ENV
【讨论】:
但它不适用于 El Capitan。你应该禁用System Integrity Protection。
【讨论】: