Могу ли я настроить контент для конкретной среды? - PullRequest
1 голос
/ 17 июля 2009

Точно так же, как вы можете генерировать конкретный контент на основе типа браузера, есть ли способ генерировать конкретный контент на основе сервера, на котором работает PHP, без ссылки на сервер или имя сайта?

Например, способ для PHP автоматически определять среду, в которой он находился, и настраивать такие вещи, как соединения с БД, ini_set для ошибок и т. Д., В зависимости от того, была ли это среда разработки, ITS, UAT или производственная среда.

Два способа, о которых я думал, - это распознавать заголовок HTTP, указывающий среды разработки и QA, или иметь пользовательские свойства в php.ini.

Я немного проснулся и обнаружил функцию php для чтения заголовков http, но php переопределяет все, что я установил на веб-сервере, и я не знаю, можно ли вообще их установить в php.ini.

Я понятия не имею, возможно ли добавить пользовательские значения в php.ini, но у меня был тест, и ini_get не смог его найти (я перезапустил веб-сервер после изменения php.ini, конечно).

Ответы [ 5 ]

4 голосов
/ 17 июля 2009

вы можете указать переменную окружения в apache (conf, vhost, .htaccess или как httpd daem), а затем получить к ней доступ через $ _ENVˆsuperglobal

0 голосов
/ 17 марта 2011

Другой альтернативой, которая еще не была упомянута, является создание специфического для сервера (но с тем же именем) файла конфигурации, который будет включен в начало сценария вашего сайта. В этом специфичном для сервера файле конфигурации вы можете установить переменные конфигурации как константы. Таким образом, если позже был загружен «универсальный» файл конфигурации, его значения могут быть переопределены в файле конфигурации для конкретного сервера, поскольку константы не могут быть переопределены. Вы хотите либо исключить имя файла конфигурации конкретного сервера из синхронизаций, либо оставить его вне пути основного содержимого, чтобы оно не было случайно перезаписано.

Для этой цели вы даже можете настроить константные массивы с помощью Constant Array 2 class .

Когда используются специфичные для сервера файлы конфигурации, вам не нужно беспокоиться о текущем SERVER_NAME - это облегчает вам определение предполагаемой среды независимо от текущего имени системы, что может пригодиться также для целей обеспечения качества.

0 голосов
/ 20 июля 2009

Используя FastCGI на IIS, вы можете устанавливать переменные окружения. Они не доступны для $ _ENV, но могут быть получены с помощью getenv ("varname").

Чтобы настроить переменные среды FastCGI в IIS 5 или 6, вам необходимо отредактировать: 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, поэтому существует только один сайт и идентификатор сайта равен 1, как указано в строке 2 [Типы].

В IIS 6 у вас может быть несколько сайтов, и по следующей ссылке вы узнаете, как найти идентификатор сайта: http://weblogs.asp.net/owscott/archive/2005/07/29/how-to-find-the-siteid-in-iis5-and-iis6.aspx.

IIS 7 можно настроить через пользовательский интерфейс, очевидно, после установки пакета администрирования для IIS 7.

0 голосов
/ 17 июля 2009
0 голосов
/ 17 июля 2009

Я использую следующее для загрузки различных настроек для разных серверов:

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

Пока проблем с этим не было

...