使用Apache时设置访问PHP的环境变量

129

我有一个Linux环境和一个PHP Web应用程序,该应用程序根据环境变量条件性运行,使用PHP中的getenv。我需要知道这些环境变量需要如何设置才能使应用程序正常工作。我不确定如何在Apache上设置它。

此外,我需要能够为每个域单独配置不同的环境变量。

请指导我如何实现这一点。


https://dev59.com/f3VC5IYBdhLWcg3w51vy - Mike B
4个回答

190

大致意思是:

<VirtualHost hostname:80>
   ...
   SetEnv VARIABLE_NAME variable_value
   ...
</VirtualHost>

4
$_ENV数组中没有我的值,如需提取该值,请参见:https://dev59.com/8nE95IYBdhLWcg3wSb3P - i_a
7
你可以使用 getenv('VARIABLE_NAME') 在 PHP 中获取变量的值。 - BeetleJuice
在Windows上的XAMPP中,该文件将位于C:\ xampp \ apache \ conf \ extra \ httpd-vhosts.conf。 - Dung
1
在我的机器上,该值也可以在$_SERVER变量中找到。 - robsch
如果您不想更改vhost.conf,也可以使用IncludeIncludeOptional - Joe Bobson

36

如果网站启用了 .htaccess 文件,您也可以在其中执行此操作。

SetEnv KOHANA_ENV production

在.htaccess文件中添加以下内容即可添加环境变量:


这与使用像 Laravel 这样的 .env 文件有什么不同吗?这会使它变得不太安全吗?我问这个问题是因为我正在使用多个框架(Laravel、Express、Django 等)构建相同的后端结构,其中一些其他语言的开发人员说不应该使用 .env,而应该使用“服务器配置”,或通过命令行进行操作,类似于 Heroku。 - OzzyTheGiant

18

如果您的服务器是Ubuntu,并且Apache版本为2.4

服务器版本:Apache/2.4.29(Ubuntu)

那么您需要在/etc/apache2/envvars位置导出变量。

就像下面这行一样,您需要在/etc/apache2/envvars中添加一行额外的代码:

export MY_ENV_NAME=myEnvValue


如果您正在寻找LAMP堆栈的解答,那么这可能是您想要使用的。顺便说一句,回答得很好! - Joseph Terribile

10

难以置信,在CentOS 6.4上的httpd 2.2上,这个方法是可行的。

/etc/sysconfig/httpd中导出环境变量。

export mydocroot=/var/www/html

然后只需要这样做...

<VirtualHost *:80>
  DocumentRoot ${mydocroot}
</VirtualHost>

然后最后...

service httpd restart;

不确定为什么在MacOSX的Apache中,DocumentRoot ${mydocroot}只是将其写成字符串而不是对其进行评估并将其放置在虚拟主机中。 - Ricky Levi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接