Я хотел бы автоматически изменять настройки подключения к моей базе данных для каждого виртуального хоста, чтобы мне не приходилось редактировать какой-либо PHP-код, когда он переходит от промежуточного к живому и при этом обращается к разным базам данных. Это на одном выделенном сервере.
Поэтому мне было интересно, могу ли я установить переменную или константу PHP в httpd.conf как часть определения vhost, которую сайт может затем использовать для автоматического указания себя на тестовую базу данных?
$database = 'live';
if (some staging environment variable is true) {
$database = 'testing'; // and not live
}
Если это невозможно, я думаю, что в этом случае я могу безопасно проверить имя хоста, на котором я работаю, чтобы сказать, но я бы хотел что-то менее хрупкое.
Надеюсь, это имеет смысл
огромное спасибо
Ян
Мы выпускаем двадцать релизов в неделю, пока ... Почему ты предлагаешь хорошую идею?
Учтите, что сценариям оболочки, работающим вне apache, также необходимо знать свое окружение.






Ага ... вы можете сделать это:
SetEnv DATABASE_NAME testing
а затем в PHP:
$database = $_SERVER["DATABASE_NAME"];
или же
$database = getenv("DATABASE_NAME");
Насколько я знаю, это должно быть $ _SERVER ['DATABASE_NAME'] вместо $ _ENV. Протестировал здесь на php 5.2 debian, и переменные вставлены не в $ _ENV, а в $ _SERVER
Похоже, ты прав. $ _ENV работает в командной строке, но, похоже, он не заполняется при работе под Apache.
Это больше похоже на ответ, о котором просил OP. Принятый ответ предназначен для отмены настроек.
Вы можете установить переменную среды и получить ее с помощью PHP.
В httpd.conf:
SetEnv database testing
В вашем PHP:
if (getenv('database') == 'testing') {
или же
if ($_SERVER['database'] == 'testing') {
Работает в apache 2.4
Вы пробовали использовать файл .htaccess? Вы можете переопределить значения php.ini, используя его.
Просто поместите файл .htaccess в каталог htdocs:
php_value name value
Дополнительная информация:
Делать это через htaccess кажется гораздо лучшей идеей, чем через httpd.conf.
Не согласен; лучше делать это в разделе конфигурации vhost, так как это означает, что вы можете полностью отключить .htaccess, что дает прирост производительности для apache, поскольку ему не нужно проверять файл .htaccess для каждого запроса.
Если это все еще не работает, проверьте свой httpd.conf на наличие команды AllowOverride none. Потратил 45 минут, пытаясь выяснить, почему мой файл .htaccess только что игнорировался.
А как получить его в PHP?
Я бы не стал устанавливать переменную среды, так как это также видно в выходных данных скрипта по умолчанию, таких как PhpInfo ();
просто используйте php_value в вашем .htaccess прямо над папкой htdocs, и все готово и безопасно :)
Проблема с .htaccess заключается в том, что он является частью базового дерева кода. И дерево кодовой базы является частью VC / SVN. Следовательно, любые изменения в локальном / dev переносятся в производство. Сохранение настройки переменной env в httpd.conf избавляет вас от необходимости быть осторожным, чтобы случайно не перезаписать флаг server vs dev. Если, конечно, вы не хотите иметь дело с IP-адресом или именем хоста, оба из которых не являются масштабируемыми подходами.
Не говоря уже о том, что вы также можете установить его при определении VirtualHost.
Я тоже искал такое решение. Я обнаружил следующее: в Apache вы можете использовать SetEnv KeyName DataValue в http.conf, а в IIS вы можете использовать Fast CGI Settings >> Edit ... >> Environment Variables >> ... и добавить KeyName, DataValue.
Это, в свою очередь, позволяет установить для PHP $var = $_SERVER["KeyName"]; значение DataValue и последовательно использовать его по мере необходимости как в IIS, так и в Apache.
Я знаю, что это странный вариант использования. Я использую WAMP на работе и MAMP дома, поэтому приятно работать одинаково.
Это плохая идея. По крайней мере, ИМХО. Используйте свой VC, сделайте тег и зафиксируйте необходимые изменения и покончите с этим. Это будет намного чище, чем какая-то конфигурация на стороне сервера.