【发布时间】:2011-03-18 01:53:08
【问题描述】:
与可以根据浏览器类型生成特定内容的方式相同,有没有一种方法可以根据运行 PHP 的服务器生成特定内容,而无需参考服务器或站点名称?
例如,一种让 PHP 自动检测其所处环境并配置数据库连接、ini_set 错误等内容的方法,具体取决于它是开发环境、ITS、UAT 还是生产环境。
我想到的两种方法是识别指示开发和 QA 环境的 HTTP 标头或在 php.ini 中具有自定义属性。
我稍微醒了,发现了读取http头的php函数,但是php覆盖了我在web服务器中设置的任何东西,我不知道它们是否可以在php.ini中设置。
我不知道是否可以向 php.ini 添加自定义值,但我进行了测试,但 ini_get 找不到它(当然,我在更改 php.ini 后重新启动了 Web 服务器)。
【问题讨论】:
-
我不想使用服务器名称,因为可能有任意数量的开发机器,QA 服务器名称可能会更改等。如果我可以通过设置它们,$_ENV 似乎是可行的方法IIS,这是我作为 Web 服务器必须使用的。
-
经过一番研究,我找不到使用 ISAPI 添加环境变量的方法,所以转移到了 fastcgi(无论如何我都在计划这样做)。我按照说明配置 fastcgiext.ini 并在那里添加了环境变量并重新启动了 IIS,但 $_ENV 仍然为空。作为附加说明,我们当前的设置打破了生产周期的基本规则之一,因为开发和 ITS 站点是 IIS 5,UAT 可能是 IIS 6 和生产 IIS 7。我希望这将在实际出现之前得到解决是一个生产站点,但这意味着我目前仅限于 IIS 5。
-
$_SERVER['SERVER_NAME'] 由调用客户端调用服务器,而不是调用服务器本身。如果您通过 IP 而不是主机名连接,则 $_SERVER['SERVER_NAME'] 将是 IP 地址。如果您在 hosts 文件中设置了一个备用名称,$_SERVER['SERVER_NAME'] 就是那个,等等。考虑一下可能会有用。
-
我终于整理好了。 fastCGI 的初始文档没有提到您不只是为您的站点分配一个任意编号,您需要获取该站点的 IIS 站点 ID。一旦我有了重要的信息,我就可以使用 getenv("varname") 来检索值。 $_ENV 仍然是空的,但因为我有一个方法,我很高兴。我避免使用 $_SERVER['SERVER_NAME'] 以便任何人都可以建立一个开发站点,而不是依赖 localhost 来访问它。