使用内置 PHP Web 服务器设置环境变量
Posted
技术标签:
【中文标题】使用内置 PHP Web 服务器设置环境变量【英文标题】:Setting environment variables with the built-in PHP web server 【发布时间】:2012-11-26 20:56:39 【问题描述】:php 5.4 支持 built-in web server 用于开发目的。我们正在开发的应用程序是通过环境变量配置的。
使用 Apache,您可以这样做:
SetEnv FAVORITE_COLOR white
使用普通的 CLI,您可以这样做:
$ export FAVORITE_COLOR=black
$ php -a
php > echo $_SERVER['FAVORITE_COLOR'];
有没有办法为内置的网络服务器设置这些变量?
【问题讨论】:
如果您像在第二个示例中那样设置环境变量,然后使用适当的选项而不是-a
来启动 Web 服务器会怎样?
$_ENV
中没有任何内容,$_SERVER
中的典型内容(例如 'DOCUMENT_ROOT'
)
getenv
有什么回报吗?
这……令人不安。如果您使用setenv
,您至少可以在getenv
或$_ENV
中取回相同的值吗?我会自己测试一下,但我手边没有 5.4 的副本。
使用putenv("FAVORITE_COLOR=VIOLET_BLUE")
设置的变量可以使用getenv("FAVORITE_COLOR")
检索,但$_ENV
将保持为空。令人不安的强词=)
【参考方案1】:
在 Windows 上:
SET FOO=BAR
php -s localhost:9090
【讨论】:
【参考方案2】:看起来 E 被排除在运行内置服务器的 variable_order 设置之外。如果将 E 添加到 variable_order 设置,它会起作用:
test.php
<?php
var_dump($_ENV['FOO']);
外壳:
FOO=BAR php -d variables_order=EGPCS -S localhost:9090 /tmp/test.php
输出:
string 'BAR' (length=3)
在 PHP 5.4.12 上测试
【讨论】:
如果您想知道为什么这不适用于在 Symfony2 中设置容器参数,请查看此问题:github.com/symfony/symfony/issues/10208 所以没有办法让它出现在$_SERVER
?
@caesarsol 看起来像是 2014 年报告的 php 问题,被标记为 2015 年不会修复。bugs.php.net/bug.php?id=67808
$_ENV
似乎不可靠,它可以在php.ini
中被禁用,我们可能无法更改。我发现当$_ENV
在 PHP 7 CLI Web 服务器上为空时,getenv()
确实有效。但是同时,如果这些环境变量是通过 Apache 或 nginx 设置的,它们会显示为 CGI 变量,并且似乎 Apache 和 NGINX 填充了$_SERVER
,但不一定是getenv
。以上是关于使用内置 PHP Web 服务器设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章
现代 PHP 新特性 —— 内置的 HTTP 服务器 (转)