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

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

php -dAPPLICATION_ENV=staging script.php

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


答案 1
APPLICATION_ENV=staging php script.php

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

echo $_SERVER['APPLICATION_ENV'];

答案 2

无法通过向 PHP 二进制文件传递选项来专门设置命令行中专门用于执行脚本的环境变量。

您有几种选择:

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

最后两个选项可能是执行此操作的最干净的方法,因为创建的变量仅在脚本运行时存在。

备选方案1的实施取决于系统。

选项2的实现也取决于系统 - 在Windows上你会做,在*nix上它会。set APPLICATION_ENV=staging&& php script.phpexport 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

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


推荐