Должно ли приложение PHP хранить данные конфигурации в определенных константах или базе данных?

Я работаю над приложением PHP и продолжаю рассказывать о том, как лучше всего хранить данные конфигурации (тип, который может иногда меняться, но, вероятно, не часто). Это включает в себя в основном много неконфиденциальной информации, такой как периоды действия для определенных токенов и файлов cookie, или параметры для различных сообщений электронной почты, которые отправляет приложение, но также включает в себя несколько более важных вещей, таких как ключи API.

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

  2. Использовать определенные константы - я также думал о том, чтобы просто использовать определенные константы и помещать данные в файл.php (конечно, за пределами веб-корня). Это, очевидно, позволило бы избежать любых поисков в базе данных, но почему-то кажется таким же расточительным определять несколько десятков констант при каждой загрузке страницы, когда данной странице понадобится всего лишь несколько из них.

Рекомендовано ли то или другое (или что-то совсем другое), будь то по соображениям безопасности, эффективности или просто стиля?

2 ответа

Решение

Я видел большие системы, которые делают оба.

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

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

Любой из этих вариантов работает, все зависит от продукта, который вы поставляете. Обычно в больших приложениях, которые распределены по нескольким клиентам, у вас есть простой бэкэнд, в котором они могут управлять многими деталями конфигурации (например, vBulletins ACP). Другими словами, вариант 1 является более распространенным из-за предоставляемого им уровня абстракции (и для каждой указанной вами причины).

Другие вопросы по тегам