1

与您可以根据浏览器类型生成特定内容的方式相同,有没有一种方法可以根据运行 PHP 的服务器生成特定内容,而无需参考服务器或站点名称?

例如,一种让 PHP 自动检测其所处环境并配置数据库连接、ini_set 错误等内容的方法,具体取决于它是开发环境、ITS、UAT 还是生产环境。

我想到的两种方法是识别指示开发和 QA 环境的 HTTP 标头或在 php.ini 中具有自定义属性。

我稍微醒来,发现了读取 http 标头的 php 函数,但是 php 覆盖了我在 Web 服务器中设置的任何内容,我不知道它们是否可以在 php.ini 中设置。

我不知道是否可以向 php.ini 添加自定义值,但是我进行了测试,但 ini_get 找不到它(当然,我在更改 php.ini 后重新启动了 Web 服务器)。

4

5 回答 5

4

您可以在 apache 中指定一个环境变量(conf、vhost、.htaccess 或作为 httpd daem),然后通过 ^$_ENV^superglobal 访问它

于 2009-07-17T15:05:23.643 回答
0

我使用以下内容为不同的服务器加载不同的设置:

switch ($_SERVER['SERVER_NAME']) {
case 'web-host': case '10.0.0.208':
    # Set DB Settings
case 'mydomain.com': default:
    # Live server settings
}

到目前为止没有问题

于 2009-07-17T14:56:14.067 回答
0

$_ENV / http://www.php.net/manual/en/reserved.variables.environment.php

于 2009-07-17T14:59:07.960 回答
0

在 IIS 上使用 FastCGI,您可以设置环境变量。它们似乎对 $_ENV 不可用,但可以使用 getenv("varname") 检索。

要在 IIS 5 或 6 中配置 FastCGI 环境变量,您需要编辑:C:\%systemdrive%\system32\inetsrv\fcgiext.ini

例如:

[Types]
php=d:\Dev\PHP\php-cgi.exe
php:1=PHP Site 1
*=Wildcard Mapping

[d:\Dev\PHP\php-cgi.exe]
QueueLength=999
MaxInstances=20
InstanceMaxRequests=500

[PHP Site 1]
ExePath=d:\Dev\PHP\php-cgi.exe
EnvironmentVars=PHPRC:d:\Dev\PHP\,SiteType:Developer

在本例中,它是 IIS 5,因此只有一个站点,并且站点 ID 为 1,如 [Types] 的第 2 行所示。

在 IIS 6 上,您可能有多个站点,以下链接告诉您如何查找站点 ID:http ://weblogs.asp.net/owscott/archive/2005/07/29/how-to-find-the-siteid -in-iis5-and-iis6.aspx

一旦安装了 IIS 7 的管理包,显然可以通过 UI 配置 IIS 7。

于 2009-07-20T11:45:30.417 回答
0

另一种尚未提及的替代方法是创建一个特定于服务器(但名称相同)的配置文件,该文件将包含在站点脚本的开头。在该服务器特定的配置文件中,您可以将配置变量设置为常量。这样,如果稍后加载了“通用”配置文件,则其值可能会在特定于服务器的配置文件中被覆盖,因为无法重新定义常量。您可能希望从同步中排除特定于服务器的配置文件名,或者将其保存在主要内容之外的路径中,以免被意外覆盖。

为此,您甚至可以在Constant Array 2 class的帮助下配置 Constant Arrays 。

当使用特定于服务器的配置文件时,您不必担心当前的 SERVER_NAME ——这使您可以更轻松地定义预期的环境,而不管当前的系统名称如何,这对于 QA 目的也很方便。

于 2011-03-17T17:53:08.843 回答