将环境变量传递到 PHP 命令行脚本

14

我想设置一个环境变量,然后在PHP中访问它,但是找不到如何做。

在(Linux)shell中,我运行:

$ APP_ENV="development"
$ export $APP_ENV

然后我运行了一个简单的测试脚本testenv.php:

<?php
print $_ENV["APP_ENV"];
print getenv("APP_ENV");

从设置了该变量的同一个 shell 中:

$ php testenv.php

这行代码不会输出任何内容,但会抛出一个提示:

Notice: Undefined index: APP_ENV in /xxxx/envtest.php on line 2

注意是有道理的,因为APP_ENV在环境变量中根本不存在,getenv()不会发出警告,只是简单地返回空值。

我错过了什么?

2个回答

17

export命令中不要使用$符号,正确的写法是:

export APP_ENV

您可以将此与分配结合使用:
export APP_ENV="development"

使用 $,您实际上是在执行以下操作:
export development

我认为OP只是加入了"$"符号来强调那些行是shell命令。 - ciruvan
4
@cuewizchris我不是在谈论export前面的$符号,而是在谈论它之后的那个。 - Barmar
@cuewizchris,实际上Barmar是正确的,export $APP_ENV前面不应该有$。 - Ahmed Masud

12

问题 1 导出环境变量

您的导出有误。

$ APP_ENV="development"
$ export APP_ENV

请注意导出语句中缺少$符号!:P

首先检查getenv以确保导出操作有效:

<?php
  echo getenv ("APP_ENV");
?>

问题2:Undefined index on this:

<?php
   echo $_ENV["APP_ENV"];
?>

如果你从getenv函数中得到了正确的值,但是在超全局变量$_ENV中却没有这个值,那么你可能需要检查一下你的ini文件。

引用php.org的话:

如果你的$_ENV数组为空,但是在调用getenv()函数或者在phpinfo()中仍然可以看到这些变量,那么请检查一下你的http://us.php.net/manual/zh/ini.core.php#ini.variables-order ini设置是否包含字符串"E"。


1
我的问题是 variables_order 没有包括 E 和 I,我觉得我自己不会发现这个问题。很好的找出来了! - Carrie Kendall
如果您只是在下一个命令中读取该变量,可以设置并运行而无需导出,因为导出将使变量在整个会话中可用: APP_ENV="development" php testenv.php - mwm

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