PHP CLI:可以设置一个$ _SERVER变量,它是一个数组吗?

时间:2016-12-22 16:47:54

标签: php bash symfony command-line-interface magento2

bash的命令行运行PHP时,是否可以设置一个$_SERVER变量,它本身就是一个数组?

也就是说,如果我做这样的事情

$ export test=foo

然后运行这样的程序

<?php
#File: test.php
var_dump($_SERVER['test']);

程序将输出字符串值&#34; foo&#34;。是否有可能$_SERVER['test']等于PHP数组没有额外的PHP代码?

我试图解决的具体问题是我有一个基于Symfony CLI的程序我无法修改,而且该程序使用$_SERVER变量来引导其环境。

use Magento\Framework\App\Bootstrap;
use Magento\Framework\Shell\ComplexParameter;
//...
$bootstrapParam = new ComplexParameter(self::INPUT_KEY_BOOTSTRAP);
$params = $bootstrapParam->mergeFromArgv($_SERVER, $_SERVER);
$params[Bootstrap::PARAM_REQUIRE_MAINTENANCE] = null;
$bootstrap = Bootstrap::create(BP, $params);

Bootstrap::create(BP, $params);识别$params中的一些嵌套键 - 我试图找到一种方法来更改这些值,而无需修改CLI程序本身。

2 个答案:

答案 0 :(得分:1)

mergeFromArgv不使用整个$_SERVER数组,而只使用$_SERVER['argv']部分,这基本上是命令行参数作为标量。

参数似乎用parse_str解析,所以你应该能够传递一个php数组a,如下所示:

php yourscript.php a[]=1\&a[]=2\&a[b]=anything

您可能需要根据shell引用字符串或转义字符。

答案 1 :(得分:1)

您可以通过 .htaccess 文件或apache .conf 文件设置任何服务器变量,您可以使用mod_env

进行设置
SetEnv MY_EXAMPLE myexample_data

然后你可以在php文件中访问该变量

echo $_SERVER["MY_EXAMPLE"]; //outputs myexample_data

或使用PHP CLI时 您可以使用以下

设置 $ _ SERVER 变量
putenv('MY_EXAMPLE=myexample_data');