Я хотел бы автоматически изменить настройки подключения к базе данных на основе 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 дома, поэтому приятно работать одинаково.