我需要从命令行运行一个PHP脚本,我需要设置一些环境变量。不幸的是,以下操作不起作用:
php -dAPPLICATION_ENV=staging script.php
我想完成的是设置APPLICATION_ENV变量。
APPLICATION_ENV
myzjeezk1#
APPLICATION_ENV=staging php script.php
该变量将在$_SERVER数组中可用:
echo $_SERVER['APPLICATION_ENV'];
bf1o4zei2#
没有办法通过向PHP二进制文件传递选项来从命令行设置专门用于执行脚本的环境变量。你有几个选择:1.在系统上全局设置变量。1.在调用脚本之前在命令行上设置变量。这将在脚本执行完成后在环境中持续存在,这可能是您不希望看到的。1.将PHP脚本 Package 在另一个脚本中,允许您创建仅在脚本执行期间存在的临时变量。1.使用命令行选项而不是环境变量。最后两个选项可能是最简洁的方法,因为创建的变量只在脚本运行时存在。选项1的实现取决于系统。选项2的实现也依赖于系统-在Windows上,您将执行set APPLICATION_ENV=staging&& php script.php,而在 *nix上,它将执行export APPLICATION_ENV='staging' && php script.php。如果选择选项3,您可能会倾向于使用shell脚本,但这不是可移植的(对于Windows,您需要一个批处理文件,对于 *nix环境,您需要一个shell脚本。相反,我建议你写一个简单的PHP Package 器脚本,类似这样:
set APPLICATION_ENV=staging&& php script.php
export APPLICATION_ENV='staging' && php script.php
<?php putenv('APPLICATION_ENV=staging'); include('script.php');
这允许您保持目标脚本不变,并仅为脚本的会话设置环境变量。更复杂的 Package 器脚本可以很容易地创建,这将允许您在命令行上指定变量,甚至动态指定在设置这些变量时应执行的脚本。选项4可以使用$argv变量实现:
$argv
<?php $applicationEnv = $argv[1]; // rest of you script
...并调用脚本如下:
php script.php staging
然而,我突然想到,你似乎在向脚本指示正在哪个环境中运行(staging,dev,live等)-在这种情况下,设置一个服务器范围的变量可能是最简单的,并根据需要重命名它以防止与其他应用程序可能正在设置的变量冲突。这样,您就可以简单地调用脚本,而无需担心这一点。这是假设您的暂存环境运行在与现场不同的机器上(应该是这样)。
gwo2fgha3#
当您从命令行执行PHP脚本时,它会继承在shell中定义的环境变量。这意味着您可以使用export命令设置环境变量,如下所示:
export APPLICATION_ENV='staging'
或直接用于每个脚本的调用:
export APPLICATION_ENV='staging' && php my-script.php
zaqlnxep4#
以下是设置一个环境变量的示例:
ENV_VAR='var' php script.php
如果你想设置多个变量,试试这个:
ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php
j2datikz5#
您可以在/etc/environment中设置一个变量,如FOO="bar",然后可以在CLI和Web请求中使用getenv()访问该变量。您可能需要重新登录才能使此更改生效。
/etc/environment
FOO="bar"
9fkzdhlc6#
尝试使用putenv并通过参数传递变量
php script.php APPLICATION_ENV=staging
在script.php代码中:
for($i=1;$i<count($argv);$i++){ putenv($argv[$i]); }
yks3o0rb7#
我有同样的情况,我使用下一个代码(它为我工作):
export APPLICATION_ENV=staging && php script.php
希望对你也有帮助。
7条答案
按热度按时间myzjeezk1#
该变量将在$_SERVER数组中可用:
bf1o4zei2#
没有办法通过向PHP二进制文件传递选项来从命令行设置专门用于执行脚本的环境变量。
你有几个选择:
1.在系统上全局设置变量。
1.在调用脚本之前在命令行上设置变量。这将在脚本执行完成后在环境中持续存在,这可能是您不希望看到的。
1.将PHP脚本 Package 在另一个脚本中,允许您创建仅在脚本执行期间存在的临时变量。
1.使用命令行选项而不是环境变量。
最后两个选项可能是最简洁的方法,因为创建的变量只在脚本运行时存在。
选项1的实现取决于系统。
选项2的实现也依赖于系统-在Windows上,您将执行
set APPLICATION_ENV=staging&& php script.php
,而在 *nix上,它将执行export APPLICATION_ENV='staging' && php script.php
。如果选择选项3,您可能会倾向于使用shell脚本,但这不是可移植的(对于Windows,您需要一个批处理文件,对于 *nix环境,您需要一个shell脚本。相反,我建议你写一个简单的PHP Package 器脚本,类似这样:
这允许您保持目标脚本不变,并仅为脚本的会话设置环境变量。
更复杂的 Package 器脚本可以很容易地创建,这将允许您在命令行上指定变量,甚至动态指定在设置这些变量时应执行的脚本。
选项4可以使用
$argv
变量实现:...并调用脚本如下:
然而,我突然想到,你似乎在向脚本指示正在哪个环境中运行(staging,dev,live等)-在这种情况下,设置一个服务器范围的变量可能是最简单的,并根据需要重命名它以防止与其他应用程序可能正在设置的变量冲突。这样,您就可以简单地调用脚本,而无需担心这一点。这是假设您的暂存环境运行在与现场不同的机器上(应该是这样)。
gwo2fgha3#
当您从命令行执行PHP脚本时,它会继承在shell中定义的环境变量。这意味着您可以使用export命令设置环境变量,如下所示:
或直接用于每个脚本的调用:
zaqlnxep4#
以下是设置一个环境变量的示例:
如果你想设置多个变量,试试这个:
j2datikz5#
您可以在
/etc/environment
中设置一个变量,如FOO="bar"
,然后可以在CLI和Web请求中使用getenv()访问该变量。您可能需要重新登录才能使此更改生效。9fkzdhlc6#
尝试使用putenv并通过参数传递变量
在script.php代码中:
yks3o0rb7#
我有同样的情况,我使用下一个代码(它为我工作):
希望对你也有帮助。