从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程序本身。
答案 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');