使用内置 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 服务器 (转)

PHP内置服务器

tp6内置服务器性能如何

PhpStorm 运行时出错说内置 Web 服务器仅在 PHP 5.4 后可用

在 PHP 内置的 Web 服务器中打印一些东西

PHP 内置 Web 服务器和路由器脚本中的语法错误