我的系统是Ubuntu,我在/etc/environment
中设置了环境变量。
如果我使用CLI运行PHP脚本-可以识别/etc/environment
中的环境变量。
但是,如果我通过http://domain/test.php
(即apache 2 handler)执行PHP脚本,则完全相同的脚本输出NULL,这意味着没有加载来自/etc/environment
的环境变量。
我所做的修复是在/etc/apache2/envvars
中添加变量,这解决了问题。
但这是两个不同的文件,它们必须保持同步。
如何让PHP/Apache从/etc/environment
(系统)加载和识别环境变量?
编辑:澄清一下,当我说'not loaded into PHP'时,它的意思是/etc/environment
中的变量没有在$_SERVER
,$_ENV
,getenv()
中设置,也不存在于$GLOBALS
中。
4条答案
按热度按时间tvmytwxo1#
2014年原始回复
我遇到了完全相同的问题,为了解决这个问题,我只是在
/etc/apache2/envvars
中获取了/etc/environment
。/etc/environment
的含量:/etc/apache2/envvars
的含量:现在,我可以在Apache虚拟主机配置文件和PHP中使用这些变量。
下面是Apache虚拟主机的一个示例:
这是一个如何使用PHP访问它们的示例:
更新自2020年
正如你们中的一些人所提到的,这种方法是相当古老的,不安全的,因为我们不希望Web服务器知道所有关于其他环境变量的信息,并让攻击者可以访问它们。
我的答案已经过时,显然不再有效!
主要思想是在一个地方定义一些项目常量,并在多个地方(bash脚本、Apache或Nginx conf、PHP脚本)提供这些变量。您可以有一个包含这些变量的项目文件,并且只在
/etc/apache2/envvars
和/etc/environment
中提供这个变量。**几年来,我一直使用Ansible来部署我的项目。这样,我可以定义一些常量或变量,并将它们注入到多个配置文件中。**如果我部署到服务器集群,我还可以灵活地覆盖它们,并使用它们的变体。
dgtucam12#
在ubuntu上,PHP对常规进程和CLI进程使用不同的ini文件。
应该有一些ini文件,如
/etc/php5/cli/php.ini
、/etc/php5/fpm/php.ini
或/etc/php5/php.ini
。打开相关的INI文件并更改variables_order = "GPCS"
行到
variables_order = "EGPCS"
.之后,您将获得在使用$_ ENV ['varname ']之前设置的环境变量。
来自php.ini关于
variables_order
的内容:因此,您可以尝试使用getenv()而不是$_ ENV []。
sxissh063#
最近我写了一个库来从环境变量中获取值并解析为PHP数据类型。这个库可以用来将环境变量解析为PHP数据类型(比如转换为整型、浮点型、空值、布尔型),解析复杂的数据结构,比如JSON字符串,以及其他一些社区的贡献。
该库可从以下位置获得:https://github.com/jpcercal/environment
将您的环境变量放入“/etc/environment”和“/etc/apache 2/envars”,重启Apache服务器并将环境变量加载到操作系统后:
要从环境变量(独立于环境CLI,Apache,Nginx,PHP内置服务器等)获取值,请执行以下操作:
好好享受吧。
iezvtpos4#
我认为您只能使用从. htaccess设置环境变量:
PHP语言: