Question

In the same way that you can generate specific content based on browser type is there a way to generate specific content based on the server running PHP without reference to the server or site name?

For example, a way for PHP to automatically detect the environment it was in and configure things like DB connections, ini_set for errors etc. depending if it was a development, ITS, UAT or production environment.

The 2 ways I thought of were to recognise an HTTP header indicating development and QA environments or to have custom properties in php.ini.

I have woken up slightly and found out the php function to read the http headers but php overrides anything I set in the web server and I do not know if they can be set in php.ini at all.

I have no idea if it is possible to add custom values to php.ini but I had a test and ini_get would not find it (I had restarted the web server after changing php.ini of course).

Was it helpful?

Solution 4

Using FastCGI on IIS you can set Environment variables. They do not seem to be available to $_ENV but can be retrieved with getenv("varname").

To configure FastCGI environment variables in IIS 5 or 6 you need to edit: C:\%systemdrive%\system32\inetsrv\fcgiext.ini

For example:

[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

In this instance it is IIS 5 so there is only one site and the site ID is 1 as indicated in line 2 of [Types].

On IIS 6 you may have multiple sites and the following link tells you how to find the Site ID: http://weblogs.asp.net/owscott/archive/2005/07/29/how-to-find-the-siteid-in-iis5-and-iis6.aspx.

IIS 7 can be configured via the UI apparently once the Administration Pack for IIS 7 has been installed.

OTHER TIPS

you can specify an environment variable in apache (conf, vhost, .htaccess or as an httpd daem) and then acces it via the ˆ$_ENVˆsuperglobal

I use the following to load different settings for different servers:

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

Not had a problem with it so far

Another alternative that hasn't been mentioned yet would be to create a server-specific (but with the same name) configuration file that would be included in the beginning of your site script. In that server-specific config file you could set configuration variables as constants. That way, if there was a 'generic' configuration file loaded later, its values could be overridden in the server-specific configuration file as constants can't be redefined. You would want to either exclude the server-specific configuration file name from the synchronizations, or keep it in a path outside of the main content so that it is not accidentally overwritten.

For this purpose you can even configure Constant Arrays with help of Constant Array 2 class.

When server-specific configuration files are used you don't have to worry about the current SERVER_NAME -- this makes it easier for you to define the intended environment regardless of the current system name which could be handy also for QA purposes.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top