在运行命令行脚本时设置PHP环境变量

时间:2013-08-07 08:09:19

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

我需要从命令行运行PHP脚本,我需要设置一些环境变量。不幸的是,以下不起作用:

php -dAPPLICATION_ENV=staging script.php

我想要完成的是设置APPLICATION_ENV变量。

7 个答案:

答案 0 :(得分:25)

APPLICATION_ENV=staging php script.php

该变量将在$ _SERVER数组中可用:

echo $_SERVER['APPLICATION_ENV'];

答案 1 :(得分:11)

通过将选项传递给PHP二进制文件,无法通过命令行专门为执行脚本设置环境变量。

您有几个选择:

  1. 在系统上全局设置变量。
  2. 在调用脚本之前在命令行上设置变量。在脚本执行完毕后,这将在环境中持续存在,这可能是您不想要的。
  3. 将PHP脚本包装在另一个脚本中,允许您创建仅在脚本持续时间内存在的临时变量。
  4. 使用命令行选项而不是环境变量。
  5. 最后两个选项可能是最干净的方法,因为创建的变量仅存在于脚本的运行时间。

    选项1的实施取决于系统。

    选项2的实现也取决于系统 - 在Windows上您可以set APPLICATION_ENV=staging&& php script.php,在* nix上它将是export APPLICATION_ENV='staging' && php script.php

    如果你选择3,你可能会想要一个shell脚本,但这不是可移植的(你需要一个Windows的批处理文件和一个* nix环境的shell脚本。相反,我会建议你写一个简单的PHP包装脚本,如下所示:

    <?php
    
        putenv('APPLICATION_ENV=staging');
    
        include('script.php');
    

    这允许您保持目标脚本不变,并仅为脚本的会话设置环境变量。

    可以轻松创建一个更复杂的包装器脚本,它允许您在命令行上指定变量,甚至可以动态指定在设置这些变量时应该执行的脚本。

    可以使用$argv变量实现选项4:

    <?php
    
        $applicationEnv = $argv[1];
    
        // rest of you script
    

    ...并调用脚本:

    php script.php staging
    

    然而,我发现你似乎在向脚本指示正在运行的环境(staging,dev,live等) - 在这种情况下,设置服务器范围的变量并重命名可能是最简单的必要时,以防止与其他应用程序可能设置的变量冲突。这样你就可以简单地调用脚本而不用担心这个问题。这假设你的登台环境在不同的机器上运行(它应该是)。

答案 2 :(得分:10)

从命令行执行PHP脚本时,它会继承shell中定义的环境变量。这意味着您可以使用export命令设置环境变量,如下所示:

export APPLICATION_ENV='staging'

答案 3 :(得分:8)

以下是设置一个环境变量的示例:

ENV_VAR='var' php script.php 

以防您想要设置多个变量 试试这个:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 

答案 4 :(得分:6)

您可以在toString()中设置一个类似/etc/environment的变量,然后在CLI和Web请求中使用getenv()进行访问。您可能需要重新启动此更改才能生效。

答案 5 :(得分:2)

尝试使用putenv并通过参数传递变量

php script.php APPLICATION_ENV=staging

在script.php代码中:

for($i=1;$i<count($argv);$i++){
     putenv($argv[$i]);
}

答案 6 :(得分:1)

我有相同的情况,我使用下一个代码(它适用于我):

export APPLICATION_ENV=staging && php script.php

希望它对你也有帮助。