我需要从命令行运行PHP脚本,我需要设置一些环境变量。不幸的是,以下不工作:在运行命令行脚本时设置PHP环境变量
php -dAPPLICATION_ENV=staging script.php
我想什么来完成是具有APPLICATION_ENV
变量集。
我需要从命令行运行PHP脚本,我需要设置一些环境变量。不幸的是,以下不工作:在运行命令行脚本时设置PHP环境变量
php -dAPPLICATION_ENV=staging script.php
我想什么来完成是具有APPLICATION_ENV
变量集。
APPLICATION_ENV=staging php script.php
的变量将在$ _SERVER数组中可用:
echo $_SERVER['APPLICATION_ENV'];
有没有办法通过命令行通过传递选项添加到PHP二进制执行脚本的设置环境变量明确。
您有几种选择:
最后两个选项可能是最干净的方法,因为创建的变量只存在于脚本的运行时间。
选项1的实施依赖于系统。
选项2的实现也是系统相关的 - 在Windows上,您将执行set APPLICATION_ENV=staging&& php script.php
,在* nix上它将是export APPLICATION_ENV='staging' && php script.php
。
如果你想要选择3,你可能会尝试去寻找一个shell脚本,但这不是可移植的(你需要一个Windows的批处理文件和* nix环境的shell脚本,相反, d建议你写一个简单的PHP包装脚本,这样的事情:
<?php
putenv('APPLICATION_ENV=staging');
include('script.php');
这可以让你离开你的目标脚本不变,并为脚本的会话环境变量只
一个更复杂的包装脚本可以很容易地创建,这将允许您在命令行中指定变量,甚至动态指定脚本当这些变量被设置时应该执行的。
选项4可以使用变量来实现:
<?php
$applicationEnv = $argv[1];
// rest of you script
...并调用类的脚本:
php script.php staging
但是,它发生,我认为你似乎被指示将环境中运行脚本(分期开发,居住等) - 在这种情况下,可能最简单的方法是设置一个服务器范围的变量,并将其重命名为防止与其他应用程序可能设置的变量冲突。这样你就可以简单地调用脚本,而不用担心这个问题。这是假定您的临时环境在不同的机器上运行(它应该是)。
尝试用putenv并通过参数
php script.php APPLICATION_ENV=staging
而在script.php的代码通过变量:
for($i=1;$i<count($argv);$i++){
putenv($argv[$i]);
}
您可以在/etc/environment
变量像FOO="bar"
然后与getenv的访问()在CLI和Web请求中。您可能需要重新登录才能使此更改生效。
+1对于“您可能需要重新登录才能使此更改生效”。我一直在想着为什么我的'/ etc/environment'中的东西不起作用,我一直在抨击我的头,直到我看到这个评论。 –
我有同样的情况,我用下面的代码(我的作品):
export APPLICATION_ENV=staging && php script.php
希望它能对你也有帮助。
下面是设置一个envirnnomental设置的例子:
ENV_VAR='var' php script.php
以防万一你要设置多个变量 试试这个:
ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php
是-d和APPLICATION_ENV一个错字之间的空间?尝试把putenv(“APPLICATION_ENV = staging”);在script.php – Tdelang
您是否需要在脚本中设置一些变量,或者从脚本中访问环境变量?如果是后者,你使用什么代码来访问它? – DaveRandom
在脚本中用'getenv()'函数检索变量。 – Wiktor