У меня есть некоторые метаданные сайта, которые я хотел бы изменить … например, в моем приложении, если системный администратор не захотел использовать часть «Инвентаризация» сайта, он / она мог отключить его, и он исчезнет с основного сайта.
Поэтому я подумал, может быть, я мог бы сделать таблицу в моей базе данных под названием «meta» и вставить значения (или кортежи) там! Затем, если модуль отключился, скрипт обновил строку и установил «module x» равным 0, и я бы покончил с этим, не так ли?
За исключением того, что это кажется ужасным множеством накладных расходов (создание всей таблицы и ее поддержание и т. Д.) Только для набора значений … В основном, мое решение звучит как перетаскивание квадратной привязки в круглый слот.
Беглый взгляд на базу данных drupal ничего не дал, и я предполагаю, что они используют файл конфигурации на самом сервере? Если это так, я не знаю точно, как сохраненные значения в файле .cfg (например) могут быть прочитаны веб-приложением, и я не знаю, как такое приложение может сохранять информацию в файл. Я был бы признателен вам за понимание, если вы решили эту проблему раньше.
Кстати, я использую прежде всего PHP.
Заранее спасибо!
Я часто видел, что это было выполнено с помощью массива config:
$config["admin_email"] = "admin@mydomain.com"; $config["site_name"] = "Bob's Trinket Store"; $config["excluded_modules"] = array("inventory", "user_chat");
Затем вы можете проверить:
if (!in_array("inventory", $config["excluded_modules"])) { // include inventory logic }
Конечно, это немного назад. На самом деле было бы разумнее явно объявлять включенные модули, а не отрицательные. Затем вы будете ссылаться на этот config.php
в своем проекте на загрузку и действовать в ответ на различные конфигурации.
Вы также можете реализовать это как таблицу базы данных, создав не менее двух полей:
Где option
может быть «excluded_modules», и его соответствующим value
будет «inventory, user_cat». Однако, честно говоря, этот метод немного неряшлив и может вызвать у вас некоторое разочарование в будущем.
Я знаю, что ваш вопрос: «Как я читаю / пишу в отдельный файл на сервере из веб-приложения», но я решил, что рассмотрю одно из сделанных вами предположений. Нет ничего (слишком) неправильно с сохранением вашего конфига в БД.
Я видел проекты (с большим количеством трафика и хорошим временем безотказной работы), а также тонны ИТ, которые сохраняют его таким образом = P), который хранит конфигурацию в базе данных, более или менее, как вы описали. Если это отдельная таблица, и у вас на ней нет сумасшедшей схемы сбоя / разделения, то на самом деле это НЕ ТАКОЕ накладные расходы.
БД имеет множество функций, помимо хранения данных и большой инфраструктуры вокруг него. Если вы используете БД для своей конфигурации, вы можете использовать любой механизм, который у вас есть для развертывания / резервного копирования БД, с небольшими дополнительными затратами. Вы также можете воспользоваться встроенным механизмом разрешений и любыми доступными функциями отмены.
Редактировать: Однако, если вы получаете доступ к этой конфигурации на каждом дисплее страницы, тем не менее, вы можете иметь узкое место 🙂 Все о вашем дизайне. Одним из решений является то, что если у вас есть постоянный веб-сервис, вы можете повторно переустановить его каждые X секунд.
У вас есть два варианта в принципе – либо поместить его в таблицу БД, либо в плоский конфигурационный файл (возможно, PHP, возможно, XML). С последним, чтобы сделать его редактируемым со страницы, вам придется (1) иметь дело с грязными проблемами доступа к файлу ОС, (1) применять правильные разрешения для файлов при каждом создании сайта и (3) анализировать и генерировать PHP / XML-код. С базой данных все, что вам нужно, это простой запрос, поэтому я бы определенно пошел с этим.
Что касается больших проектов, использующих этот подход, я знаю, что phpBB хранит большую часть своей конфигурации в базе данных (за исключением паролей, последний раз, когда я проверял).
Я предпочитаю работать с ini-файлами как конфигурацию, которая сидит перед public_html-папкой. Я считаю, что это дает мне большую гибкость и группировку var и при необходимости создает отдельный ini для модулей и т. Д.