Задать переменные PHP в httpd.conf? - PullRequest
18 голосов
/ 28 сентября 2008

Я бы хотел автоматически изменять настройки подключения к моей базе данных для каждого хоста, чтобы мне не приходилось редактировать какой-либо код PHP при его переходе от промежуточного состояния к живому и при этом получать доступ к различным базам данных. Это на одном выделенном сервере.

Итак, мне было интересно, могу ли я установить переменную или константу PHP в httpd.conf как часть определения vhost, которое сайт может затем использовать для автоматического указания на тестовую базу данных?

$database = 'live';
if (some staging environment variable is true) {
    $database = 'testing'; // and not live
}

Если это невозможно, я думаю, что в этом случае я могу безопасно проверить имя хоста, на котором я работаю, чтобы сообщить, но я бы хотел что-то менее хрупкое

Надеюсь, это имеет смысл

большое спасибо

Ian

Ответы [ 6 ]

72 голосов
/ 28 сентября 2008

Да ... вы можете сделать это:

SetEnv DATABASE_NAME testing

и затем в PHP:

$database = $_SERVER["DATABASE_NAME"];

или

$database = getenv("DATABASE_NAME");
15 голосов
/ 28 сентября 2008

Вы можете установить переменную окружения и получить ее с помощью PHP.

В httpd.conf:

SetEnv database testing

В вашем PHP:

if (getenv('database') == 'testing') {

или

if ($_SERVER['database'] == 'testing') {
12 голосов
/ 28 сентября 2008

Вы пытались использовать файл .htaccess? Вы можете переопределить значения php.ini, используя его.

Просто поместите файл .htaccess в каталог htdocs:

php_value name value

Дополнительная информация:

3 голосов
/ 28 сентября 2008

Я бы не стал устанавливать переменную окружения, так как это также видно в выходных данных скриптов по умолчанию, таких как PhpInfo ();

просто используйте php_value в вашем .htaccess чуть выше папки htdocs, и все готово и безопасно:)

2 голосов
/ 23 мая 2012

Проблема с .htaccess заключается в том, что он является частью дерева кодовой базы. И дерево кодовой базы является частью VC / SVN. Следовательно, любое изменение локального / dev переносится в производство. Сохранение значения переменной env в httpd.conf избавит вас от необходимости избегать случайной перезаписи флага сервера против dev. Если, конечно, вы не хотите использовать IP-адрес или имя хоста, оба из которых не являются масштабируемыми подходами.

0 голосов
/ 08 апреля 2017

Я также искал решение такого типа. Я обнаружил, что в Apache вы можете использовать SetEnv KeyName DataValue в http.conf, а в IIS вы можете использовать Быстрые настройки CGI >> Изменить ... >> Переменные среды >> ... и добавить KeyName, DataValue.

Это, в свою очередь, позволяет PHP $var = $_SERVER["KeyName"]; быть установленным на DataValue и использоваться по мере необходимости как в IIS, так и в Apache.

Я знаю, что это странный случай использования. Я использую WAMP на работе и MAMP дома, поэтому приятно работать одинаково.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...