Конфиг для сайта

183
16 ноября 2018, 19:00

Хочу написать фреймворк (чисто для практики), возник вопрос: а как мне хранить конфиг для сайта? обычный массив в php-файле кажется не очень красиво. Хранить в БД тоже не вариант, т.к. данные для подключения будут лежать в этом же конфиге. Может JSON или XML? Или же yaml, как в симфони?

Answer 1

Самые распространенные решения: array(), JSON, XML, YAML, INI, TOML

P.S. Мнение субъективное, чисто от личного опыта.

array() - Тут я подразумеваю стандартный массив, который вы не хотите использовать. Несмотря на то, что вам этот вариант не нравится, скорей всего вы к этому формату придете в итоге (т.е. например, если вы выберете XML вы все равно будете парсить и придете к array()).

Плюсы: плюсы - везде, но по сравнению с остальными: самый быстрый вариант (а это важно), довольно понятен, поддерживает иерархию, широкие возможности.

Минусы: для меня - нет.

Пример:

$config['ip'] = '127.0.0.1';
$config['site']['ru'] = 'stackoverflow.com';

JSON - Я бы сказал что годный вариант, но для конфига я бы не использовал, потому что минусы значительны.

Плюсы: поддерживает иерархию, распространен, поддержка в PHP из коробки, быстро парсится.

Минусы: возможно неудобен для редактирования, возможно плохая читабельность иерархических структур.

Пример:

{"ip":"127.0.0.1","site":{"ru":"stackoverflow.com"}}

XML - Сразу отсекаем, он хорош, но для конфига не подойдет, потому что слишком много мороки для сетапа.

Плюсы: поддерживает иерархию, распространен, поддержка в PHP из коробки.

Минусы: плохо редактировать, плохо читается, долго парсится (копейки, но все-же)

Пример:

<config><ip>127.0.0.1</ip><site><ru>stackoverflow.com</ru></site></config>

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

Плюсы: хорошо читается, поддерживает иерархию, распространен, поддержка в PHP из коробки, широкие возможности.

Минусы: плохо редактируется, долго парсится (копейки, но все-же) (дольше XML)

Пример:

---
ip: 127.0.0.1
site:
  ru: stackoverflow.com

INI - Хороший вариант, если нужны простые настройки, во многих местах используется и довольно актуален, практически нет правил(паттернов) оформления.

Плюсы: хорошо редактировать, хорошо читается, хорошо парсится, распространен, поддержка в PHP из коробки.

Минусы: есть проблемки с иерархиями

Пример:

ip = 127.0.0.1
[site]
ru = stackoverflow.com

TOML - по моему мнению, был создан как упрощенная версия YAML, упрощенный синтаксис (более приближенный к INI) позволяет лучше работать с конф.файлами.

Плюсы: хорошо читается, поддерживает иерархию, распространен, широкие возможности.

Минусы: плохо редактируется (но лучше чем YAML), долго парсится (копейки, но все-же) (но быстрее YAML), не поддерживается в PHP из коробки

Пример:

ip = "127.0.0.1"
[site]
ru = "stackoverflow.com"

Выбор конечно-же за вами, в нашей задаче - для конфига, я бы остановился на array(), либо INI, потому что это быстрые и удобные варианты.

Answer 2

Лучше хранить, думаю, в yml. Четкая структура. Нет "открывающих" и "закрывающих" символов. Отлично отслеживается контролем версий. Просто редактировать в любом текстовом редакторе

READ ALSO
Как спарсить страницу с javascript контентом?

Как спарсить страницу с javascript контентом?

На входе страница Ссылка

148
Обращение к свойству через переменную

Обращение к свойству через переменную

Имеется следующий объект (поля могут меняться):

161
Проблема с запуском minion - Kohana3 // Cron

Проблема с запуском minion - Kohana3 // Cron

Не могу уже 3-й день настроить модуль и корректно запуститься, помогите пожалуйста с решением проблемы

157
PHP Regex | Вырезка значений из тега span

PHP Regex | Вырезка значений из тега span

Прошу помочь с вырезкой значения из этого html кода:

135