【问题标题】:Passing an environment-variable into a php commandline script将环境变量传递给 php 命令行脚本
【发布时间】:2013-08-16 08:23:45
【问题描述】:

我想设置一个环境变量,然后在 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() 不抛出任何警告,而只是不返回任何内容。

我错过了什么?

【问题讨论】:

    标签: php environment-variables command-line-interface


    【解决方案1】:

    不要在export命令中使用$,应该是:

    export APP_ENV
    

    你可以把它和作业结合起来:

    export APP_ENV="development"
    

    使用$,您实际上是在做:

    export development
    

    【讨论】:

    • 我认为 OP 包含“$”只是为了强调这些行是 shell 命令。
    • @cuewizchris 我不是在说export 之前的$,我说的是之后它。
    • @cuewizchris 实际上没有 Barmar 是正确的 export $APP_ENV 前面不应该有 $
    【解决方案2】:

    问题1导出环境变量

    您的导出不正确。

    $ APP_ENV="development"
    $ export APP_ENV
    

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

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

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

    问题 2:未定义的索引:

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

    如果您从getenv 获得正确的值,但不是超全局$_ENV,那么您可能需要检查您的ini 文件。

    引用php.org:

    如果您的 $_ENV 数组神秘地为空,但您仍然看到 调用 getenv() 或在您的 phpinfo() 中的变量,检查您的 http://us.php.net/manual/en/ini.core.php#ini.variables-orderini 设置以确保它在字符串中包含“E”。

    【讨论】:

    • 我的问题是variables_order 不包括 E,我想我自己也不会发现。很棒的收获!
    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 2011-10-13
    • 2020-01-10
    • 2018-02-09
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    相关资源
    最近更新 更多