我需要从命令行运行PHP脚本,我需要设置一些环境变量。不幸的是,以下不起作用:
php -dAPPLICATION_ENV=staging script.php
我想要完成的是设置APPLICATION_ENV
变量。
答案 0 :(得分:25)
APPLICATION_ENV=staging php script.php
该变量将在$ _SERVER数组中可用:
echo $_SERVER['APPLICATION_ENV'];
答案 1 :(得分:11)
通过将选项传递给PHP二进制文件,无法通过命令行专门为执行脚本设置环境变量。
您有几个选择:
最后两个选项可能是最干净的方法,因为创建的变量仅存在于脚本的运行时间。
选项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
希望它对你也有帮助。