与基于浏览器类型生成特定内容的方式相同,是否有一种方法可以基于运行PHP的服务器生成特定内容,而无需引用服务器或站点名称?
例如,PHP可以自动检测其所处的环境并配置数据库连接,ini_set等错误等方式,具体取决于它是开发,ITS,UAT还是生产环境。
我想到的两种方法是识别指示开发和QA环境的HTTP标头,或者在php.ini中使用自定义属性。
我已经稍微醒来并发现了php函数来读取http标题但是php会覆盖我在Web服务器中设置的任何内容,我不知道它们是否可以在php.ini中设置。
我不知道是否可以向php.ini添加自定义值,但我有一个测试而且ini_get找不到它(我当然在更改php.ini后重启了web服务器)。
答案 0 :(得分:4)
您可以在apache中指定环境变量(conf,vhost,.htaccess或作为httpd daem),然后通过$ _ENVsuperglobal
访问它答案 1 :(得分:0)
我使用以下内容为不同的服务器加载不同的设置:
switch ($_SERVER['SERVER_NAME']) {
case 'web-host': case '10.0.0.208':
# Set DB Settings
case 'mydomain.com': default:
# Live server settings
}
到目前为止没有问题
答案 2 :(得分:0)
答案 3 :(得分:0)
在IIS上使用FastCGI可以设置环境变量。它们似乎不适用于$ _ENV,但可以使用getenv(“varname”)检索。
要在IIS 5或6中配置FastCGI环境变量,您需要编辑: C:\%系统%\ 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。
答案 4 :(得分:0)
另一个尚未提及的替代方案是创建一个特定于服务器的(但具有相同名称)配置文件,该文件将包含在站点脚本的开头。在该特定于服务器的配置文件中,您可以将配置变量设置为常量。这样,如果稍后加载了“通用”配置文件,则可以在特定于服务器的配置文件中覆盖其值,因为不能重新定义常量。您可能希望从同步中排除特定于服务器的配置文件名,或者将其保留在主内容之外的路径中,以免意外覆盖。
为此,您甚至可以在Constant Array 2 class的帮助下配置常量数组。
当使用特定于服务器的配置文件时,您不必担心当前的SERVER_NAME - 这使您可以更轻松地定义目标环境,而不管当前系统名称是否也可以用于QA目的。