我需要从命令行运行 PHP 脚本,并且需要设置一些环境变量。不幸的是,以下不起作用:
php -dAPPLICATION_ENV=staging script.php
我想要完成的是设置APPLICATION_ENV
变量。
我需要从命令行运行 PHP 脚本,并且需要设置一些环境变量。不幸的是,以下不起作用:
php -dAPPLICATION_ENV=staging script.php
我想要完成的是设置APPLICATION_ENV
变量。
APPLICATION_ENV=staging php script.php
该变量将在 $_SERVER 数组中可用:
echo $_SERVER['APPLICATION_ENV'];
无法通过将选项传递给 PHP 二进制文件来从命令行专门为执行脚本设置环境变量。
你有几个选择:
最后两个选项可能是最简洁的方法,因为创建的变量仅在脚本运行时存在。
选项 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
但是,在我看来,您似乎是在向脚本指示正在运行的环境(暂存、开发、实时等) - 在这种情况下,设置服务器范围的变量并根据需要重命名它可能是最简单的以防止与其他应用程序可能正在设置的变量发生冲突。这样您就可以简单地调用脚本而无需担心这一点。这是假设您的登台环境在与现场不同的机器上运行(它应该是)。
当您从命令行执行 PHP 脚本时,它会继承您的 shell 中定义的环境变量。这意味着您可以使用 export 命令设置环境变量,如下所示:
export APPLICATION_ENV='staging'
这是设置一个环境变量的示例:
ENV_VAR='var' php script.php
以防万一你想设置多个变量试试这个:
ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php
/etc/environment
您可以在like中设置一个变量,FOO="bar"
然后可以在 CLI 和 Web 请求中使用 getenv() 访问该变量。您可能需要重新登录才能使此更改生效。
尝试使用 putenv 并通过参数传递变量
php script.php APPLICATION_ENV=staging
在 script.php 代码中:
for($i=1;$i<count($argv);$i++){
putenv($argv[$i]);
}
我有同样的情况,我使用下一个代码(它适用于我):
export APPLICATION_ENV=staging && php script.php
希望它对你也有帮助。