15

我需要从命令行运行PHP脚本,我需要设置一些环境变量。不幸的是,以下不工作:在运行命令行脚本时设置PHP环境变量

php -dAPPLICATION_ENV=staging script.php 

我想什么来完成是具有APPLICATION_ENV变量集。

+0

是-d和APPLICATION_ENV一个错字之间的空间?尝试把putenv(“APPLICATION_ENV = staging”);在script.php – Tdelang

+0

您是否需要在脚本中设置一些变量,或者从脚本中访问环境变量?如果是后者,你使用什么代码来访问它? – DaveRandom

+0

在脚本中用'getenv()'函数检索变量。 – Wiktor

回答

21
APPLICATION_ENV=staging php script.php 

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

echo $_SERVER['APPLICATION_ENV']; 
5

当你在命令行中执行一个PHP脚本,它会继承你的shell中定义的环境变量。这意味着你可以使用export命令,如下所示设置环境变量:

export APPLICATION_ENV='staging' 
+0

我知道,我只是不想改变脚本。 – Wiktor

+0

请参阅编辑答案... – ciruvan

8

有没有办法通过命令行通过传递选项添加到PHP二进制执行脚本的设置环境变量明确。

您有几种选择:

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

最后两个选项可能是最干净的方法,因为创建的变量只存在于脚本的运行时间。

选项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 

但是,它发生,我认为你似乎被指示将环境中运行脚本(分期开发,居住等) - 在这种情况下,可能最简单的方法是设置一个服务器范围的变量,并将其重命名为防止与其他应用程序可能设置的变量冲突。这样你就可以简单地调用脚本,而不用担心这个问题。这是假定您的临时环境在不同的机器上运行(它应该是)。

2

尝试用putenv并通过参数

php script.php APPLICATION_ENV=staging 

而在script.php的代码通过变量:

for($i=1;$i<count($argv);$i++){ 
    putenv($argv[$i]); 
} 
5

您可以在/etc/environment变量像FOO="bar"然后与getenv的访问()在CLI和Web请求中。您可能需要重新登录才能使此更改生效。

+0

+1对于“您可能需要重新登录才能使此更改生效”。我一直在想着为什么我的'/ etc/environment'中的东西不起作用,我一直在抨击我的头,直到我看到这个评论。 –

1

我有同样的情况,我用下面的代码(我的作品):

export APPLICATION_ENV=staging && php script.php 

希望它能对你也有帮助。

3

下面是设置一个envirnnomental设置的例子:

ENV_VAR='var' php script.php 

以防万一你要设置多个变量 试试这个:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 
相关问题