![](/img/trans.png)
[英]In PHP, getenv('X') returns value that doesn't appear in getenv()
[英]getenv() doesn't work on Apache
我在 Windows 上设置了一个环境变量(系统属性->高级->环境变量)并尝试从 php 代码访问它,如下所示:
getenv('ENV');
我的 php 在 Xampp 的 Apache 服务器上运行,它返回false
。
我读到出于安全原因,我必须使用PassEnv
指令才能让 Apache 识别环境变量。 我试图在.htaccess
和.conf
文件中使用它,但没有成功。
想了解我缺少什么,以及我应该怎么做才能访问环境变量。
您必须重新启动 PC 才能让 PHP 读取新环境。 这就是我所做的。 我通过(System Propeties->Advanced->Environment Variables)
设置了一个环境变量,然后检查它返回bool(false)
。 我重新启动了我的电脑并再次检查,现在它可以工作了。 所以我建议你重新启动并再次检查。
编辑:
同样如果你删除windows环境变量并在PHP中检查变量而不重新启动; 它仍然会显示值。 这意味着环境变量会临时存储,直到 PC 重新启动。 我对 Windows API 没有太多想法,但这就是它的工作方式。
我还有两个有用的链接可以帮助你
编辑:
此外,我在 php.net 中发现了另一种解决方案,将 php.ini 文件中的变量顺序[variables_order = "GPCS"]
更改为[variables_order = "EGPCS"]
并重新启动 APACHE。 EGPCS 是(Environment, Get, Post, Cookie, and Server)
变量解析。 这将创建$_ENV
变量。 尝试通过$_ENV['ENV']
访问环境变量;
尝试在php.ini文件中将变量variables_order
设置为"EGPCS"
而不是开发人员和生产值"GPCS"
并重新启动服务器进程。
如何让您的代码读取更新的环境变量:
然后您可以重新打开窗口并重新启动该过程。
我和你有同样的问题,但是当我这样做时,它起作用了。 只要窗口打开,Apache 就没有注册新的环境变量。 设置新变量后,Windows 会向所有程序发送一条消息,以便下次打开这些程序时,它们将注册新变量。 任何打开的窗口都不会注册更改。
如果通过控制面板完成,还要确保在更改/设置变量后选择“确定”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.