Хочу написать фреймворк (чисто для практики), возник вопрос: а как мне хранить конфиг для сайта? обычный массив в php-файле кажется не очень красиво. Хранить в БД тоже не вариант, т.к. данные для подключения будут лежать в этом же конфиге. Может JSON или XML? Или же yaml, как в симфони?
Самые распространенные решения: 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
, потому что это быстрые и удобные варианты.
Лучше хранить, думаю, в yml. Четкая структура. Нет "открывающих" и "закрывающих" символов. Отлично отслеживается контролем версий. Просто редактировать в любом текстовом редакторе
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу уже 3-й день настроить модуль и корректно запуститься, помогите пожалуйста с решением проблемы