28

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

php -dAPPLICATION_ENV=staging script.php

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

4

7 回答 7

42
APPLICATION_ENV=staging php script.php

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

echo $_SERVER['APPLICATION_ENV'];
于 2013-08-07T08:21:36.583 回答
16

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

你有几个选择:

  1. 在系统上全局设置变量。
  2. 在调用脚本之前在命令行上设置变量。在您的脚本完成执行后,这将在环境中持续存在,您可能不希望这样做。
  3. 将 PHP 脚本包装在另一个脚本中,允许您创建一个仅在脚本执行期间存在的临时变量。
  4. 使用命令行选项而不是环境变量。

最后两个选项可能是最简洁的方法,因为创建的变量仅在脚本运行时存在。

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

选项 2 的实现也取决于系统 - 你会做的 Windowsset 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');

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

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

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

<?php

    $applicationEnv = $argv[1];

    // rest of you script

...并像这样调用脚本:

php script.php staging

但是,在我看来,您似乎是在向脚本指示正在运行的环境(暂存、开发、实时等) - 在这种情况下,设置服务器范围的变量并根据需要重命名它可能是最简单的以防止与其他应用程序可能正在设置的变量发生冲突。这样您就可以简单地调用脚本而无需担心这一点。这是假设您的登台环境在与现场不同的机器上运行(它应该是)。

于 2013-08-07T08:44:50.987 回答
12

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

export APPLICATION_ENV='staging'
于 2013-08-07T08:22:07.887 回答
9

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

ENV_VAR='var' php script.php 

以防万一你想设置多个变量试试这个:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 
于 2017-01-16T14:38:03.383 回答
6

/etc/environment您可以在like中设置一个变量,FOO="bar"然后可以在 CLI 和 Web 请求中使用 getenv() 访问该变量。您可能需要重新登录才能使此更改生效。

于 2015-07-07T21:55:16.937 回答
2

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

php script.php APPLICATION_ENV=staging

在 script.php 代码中:

for($i=1;$i<count($argv);$i++){
     putenv($argv[$i]);
}
于 2013-08-07T08:45:52.510 回答
1

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

export APPLICATION_ENV=staging && php script.php

希望它对你也有帮助。

于 2017-01-05T17:23:43.133 回答