【问题标题】:Setting environment variables with the built-in PHP web server使用内置 PHP Web 服务器设置环境变量
【发布时间】: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 将保持为空。令人不安的强词=)

标签: php environment-variables embeddedwebserver


【解决方案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
    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多