Intereting Posts
Редактор шаблона PHP, использующий хранилище файлов, базу данных или и то, и другое? Преобразовать серию отношений родитель-ребенок в иерархическое дерево? Как загрузить параметры конфигурации Symfony из базы данных (Doctrine) Выполнять скрипт php только один раз на живом сайте HTML Скребок в Php Каков наилучший способ скрыть исходный код PHP? Запросить две записи SQL? Вернуть содержимое изображения в php-файл? Форма без обновления страницы Что такое статья «Оливер », описывающая алгоритм PHP для вычисления сходства текста? Как предоставить контейнер в качестве аргумента для сервисов Как обновить базу данных mysql без перезагрузки страницы Как изменить ниже переписать url, чтобы разрешить больше подпапок, когда все URL перенаправлены на индексную страницу? имя функции ($ param, $ line = __LINE__, $ file = __FILE__) {}; PHP получает абсолютный URL-адрес сайта на сервере?

Установка переменных PHP в httpd.conf?

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

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

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

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

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

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

Ян

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

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

 php_value name value 

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

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

 SetEnv DATABASE_NAME testing 

а затем в PHP:

 $database = $_SERVER["DATABASE_NAME"]; 

или

 $database = getenv("DATABASE_NAME"); 

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

В httpd.conf:

 SetEnv database testing 

В вашем PHP:

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

или

 if ($_SERVER['database'] == 'testing') { 

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

просто используйте php_value в своем .htaccess прямо над папкой htdocs, и все готово и безопасно 🙂

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

Я также рассматривал этот тип решения. Я обнаружил, что под Apache вы можете использовать SetEnv KeyName DataValue в http.conf, а в IIS вы можете использовать Fast CGI Settings >> Edit … >> Environment Variables >> … и добавить KeyName, DataValue .

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

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