php的getenv()函数的数据来源,是$_ENV还是$_SERVER?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文重新来审视一下php
的getenv()
函数,主要分析的是它和$_SERVER
/$_ENV
的可能关系。从名字上来看,getenv()
就是从$_ENV
中获取数据。但是,真的是这样的么?
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码感想感悟。本文测试环境:win10
,nginx@1.15.11
,php@8.2.10-nts
。当然本文的结论是:getenv()
函数的数据来源,既不是$_ENV
,也不是$_SERVER
。只能说类似,但是确实没有关系。
来自putenv()的数据
这个比较好理解,只不过是putenv()
函数的使用方式,有些奇怪罢了。参考代码:
putenv("www=newsn.net");
putenv("name=苏南大叔");
echo getenv("www");
echo getenv("name");
输出:
newsn.net
苏南大叔
相关文章:
来自命令行变量的数据
这种使用方式,虽然可行。但是实际应用中,似乎没看到谁这么使用过。基于windows
系统的cmd
,测试命令如下:
set www=newsn.net && set name=苏南大叔 && php -S test:8080 -t ./
echo getenv("www");
echo getenv("name");
输出:
newsn.net
苏南大叔
需要注意的是:不同操作系统下命令行是不一样的,参考文章:
来自$_ENV
的数据?
注意:$_ENV
里面不一定有数据的,这个与php.ini
里面的variables_order
设置有关,请以实际情况为准。
测试代码:
echo PHP_VERSION;
var_dump(ini_get("variables_order"));
var_dump($_ENV);
$_ENV["www2"]="newsn.net";
var_dump($_ENV);
var_dump("www2:".getenv("www2"));
var_dump("HTTP_HOST:".getenv("HTTP_HOST"));
$_ENV["HTTP_HOST"]="newsn.net";
var_dump("HTTP_HOST:".getenv("HTTP_HOST"));
nginx
+php
输出:
8.2.10
string(4) "GPCS"
array(0) {
}
array(1) {
["www2"]=>
string(9) "newsn.net"
}
string(5) "www2:"
string(14) "HTTP_HOST:test"
string(14) "HTTP_HOST:test"
纯php
输出:
7.4.29
string(4) "GPCS"
array(0) {
}
array(1) {
["www2"]=>
string(9) "newsn.net"
}
string(5) "www2:"
string(10) "HTTP_HOST:"
string(10) "HTTP_HOST:"
结果表明:getenv()的数据,并不来源于$_ENV
。
来自$_SERVER
的数据?
注意:$_SERVER
里面不一定有数据的,这个与php.ini
里面的variables_order
设置有关,请以实际情况为准。
测试代码:
echo PHP_VERSION;
var_dump(ini_get("variables_order"));
var_dump($_SERVER);
$_SERVER["www2"]="newsn.net";
var_dump($_SERVER);
var_dump("www2:".getenv("www2"));
var_dump("HTTP_HOST:".getenv("HTTP_HOST"));
$_SERVER["HTTP_HOST"]="newsn.net";
var_dump("HTTP_HOST:".getenv("HTTP_HOST"));
nginx
+php
输出:
8.2.10
string(4) "GPCS"
array(66) {
// ...
["HTTP_HOST"]=>
string(4) "test"
}
array(67) {
// ...
["HTTP_HOST"]=>
string(4) "test"
["www2"]=>
string(9) "newsn.net"
}
string(5) "www2:"
string(14) "HTTP_HOST:test"
string(14) "HTTP_HOST:test"
纯php
命令行服务输出:
7.4.29
string(4) "GPCS"
array(22) {
// ...
["HTTP_HOST"]=>
string(9) "test:8080"
}
array(23) {
// ...
["HTTP_HOST"]=>
string(9) "test:8080"
["www2"]=>
string(9) "newsn.net"
}
string(5) "www2:"
string(10) "HTTP_HOST:"
string(10) "HTTP_HOST:"
结果表明:getenv()的数据,并不来源于$_SERVER
。
相关文章
- https://newsn.net/say/php-www-ini.html
- https://newsn.net/say/php-www.html
- https://newsn.net/say/php-putenv-getenv.html
结束语
结论如下:getenv()
的数据来源,目前有两个稳定渠道:一个是putenv()
,另外一个是命令行里面传递的全局变量(不同操作环境命令行也不一样)。至于$_ENV
和$_SERVER
,目前认为它和getenv()
是平行的关系,可能共同从某个地方获得数据,各走各的独木桥。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。