Php 我可以配置特定于环境的内容吗?

Php 我可以配置特定于环境的内容吗?,php,iis,fastcgi,isapi,Php,Iis,Fastcgi,Isapi,与您可以基于浏览器类型生成特定内容的方式相同,是否有一种方法可以基于运行PHP的服务器生成特定内容,而无需参考服务器或站点名称 例如,PHP自动检测其所在环境并配置DB连接、ini_设置错误等内容的方法,这取决于它是开发环境、ITS环境、UAT环境还是生产环境 我想到的两种方法是识别指示开发和QA环境的HTTP头,或者在php.ini中具有自定义属性 我稍微清醒了一下,发现了读取http头的php函数,但php覆盖了我在web服务器中设置的任何内容,我不知道它们是否可以在php.ini中设置 我

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

例如,PHP自动检测其所在环境并配置DB连接、ini_设置错误等内容的方法,这取决于它是开发环境、ITS环境、UAT环境还是生产环境

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

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


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

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

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

到目前为止没有问题

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

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

到目前为止没有问题

$\u ENV/

$\u ENV/

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

您可以在apache中指定环境变量(conf、vhost、.htaccess或作为httpd daem)然后通过$_ENVˆsuperglobal

在IIS上使用FastCGI访问它,您可以设置环境变量。它们似乎对$\u 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:


安装IIS 7的管理包后,可以通过UI配置IIS 7。

在IIS上使用FastCGI可以设置环境变量。它们似乎对$\u 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:


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

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

为此,您甚至可以在的帮助下配置常量数组


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

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

为此,您甚至可以在的帮助下配置常量数组


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

您说没有访问服务器或站点名称-这是否意味着$\u server['server\u name']不可用?您说没有访问服务器或站点名称-这是否意味着$\u server['server\u name']不可用?我不想使用服务器名称,因为可能有任意数量的开发机器,QA服务器名称可能会更改等。如果我可以通过IIS设置它们,则$\u ENV似乎是一种可行的方法,这是我作为web服务器必须使用的。经过一些研究,我找不到使用ISAPI添加环境变量的方法,因此移到了fastcgi(无论如何我都计划这么做)。我按照配置fastcgiext.ini中的说明进行了操作,在其中添加了环境变量,并重新启动了IIS,但$\u ENV仍然为空。另外需要注意的是,我们当前的设置打破了生产周期的基本规则之一,即开发人员及其站点是IIS5,UAT可能是IIS6和生产IIS7。我希望这会得到解决,因为实际上有一个生产站点,但这意味着我目前仅限于IIS 5。$\u SERVER['SERVER\u NAME']根据调用客户端对服务器的调用,而不是服务器本身的调用。如果你通过我连接