Почему общедоступные веб-приложения не используют INI-файлы для конфигурации

10

Почти каждая общедоступная CMS использует файл конфигурации .php для настроек базы данных и так далее. Например, WordPress автоматически создает файл конфигурации .php при его установке.

Почему они просто не используют файл .ini? PHP уже имеет parse_ini_file (), и я уверен, что другие языки имеют аналогичные функции.

thelolcat
источник

Ответы:

9

С PHP в частности; разница между INI-файлом и .conf.php незначительна.

Прямое использование PHP для конфигурации имеет явное преимущество, заключающееся в том, что ему требуется только один четко определенный, переносимый синтаксис для конфигурации, а тот факт, что файл конфигурации является правильным кодом, иногда полезен.

По сравнению с этим; INI-файл практически ничего не предлагает; и include, requireи require_onceвсе они хорошо известны и (в основном) хорошо поняты.

Виллихам Тотланд
источник
relate to one well-defined, portable syntax for configurationЯ не понимаю этого. INI-файлы также имеют четко определенный и переносимый синтаксис. Каждый .conf.phpфайл имеет свою собственную структуру, большинство основано на массивах, но это не так сильно отличается от INI-файла.
Яннис
7
Также обратите внимание, что файл PHP может обеспечить некоторую базовую безопасность. Если бы Joomla использовал XML или .iniфайлы для хранения конфигурации, без сомнения, было бы много неправильно настроенных экземпляров, работающих там, где конфигурация была общедоступной, что, как правило, не очень хорошая вещь. В случае файлов PHP очень и очень редко сервер будет неправильно настроен для предоставления его содержимого посетителю.
Том Мартенал
4

Вообще говоря, я предпочитаю .iniили XML-файлы конфигурации. В более крупных системах часто кому-то, кроме разработчика, необходимо изменить значение конфигурации, возможно, администратора баз данных или системного администратора. У большинства администраторов баз данных и системных администраторов, которых я знаю, не было бы проблем с навигацией по простому сценарию PHP, но я бы предпочел, чтобы они этого не делали. Одна маленькая ошибка может нанести вред всему приложению несколькими способами.

Но в небольших системах чрезвычайно удобно использовать PHP-скрипты для конфигурации. Сегодня я играл с AWS SDK , который также использует PHP-скрипт для конфигурации:

CFCredentials::set(array(
    'development' => array(
        'key' => 'xxx',
        'secret' => 'xxxx',
        'default_cache_config' => sys_get_temp_dir(),
        'certificate_authority' => true
    ),
    '@default' => 'development'
));    

Вместо жесткого кодирования default_cache_configя передаю системную температуру, и это будет работать в каждой системе, в которой я развертываю сценарий. Этот сценарий является небольшим подтверждением концепции, которую передадут около 10 разработчиков, и я хочу, чтобы они запустили его как есть, не задумываясь. Если прототип будет развиваться, я буду связывать его с моим классом конфигурации XML (и, очевидно, не буду полагаться на кэш файловой системы).

Яннис
источник
«Одна маленькая ошибка может нанести вред всему приложению несколькими способами». Как будто неверные значения для ini не будут? Или этот XML более дружественный?
whatsisname
@whatsisname Обычно, если неправильно настроенное значение конфигурации тормозит вашу систему, то ваши проблемы кроются в другом месте. Я думал больше о непреднамеренном куске кода в конфигурации скрипта, делающем что-то экстремальное, то, что я испытал не раз. Это невозможно с файлом ini / xml, главное, что конфигурацию скрипта - это не то, чем вы хотели бы поделиться с не разработчиками.
Яннис
3

Ответ прост: у conf.php практически нет работы, необходимой для его работы. Это просто еще один исходный файл.

как зовут
источник
0

Скорость без кеширования также может быть причиной. Конфигурация PHP может прозрачно кэшироваться при необходимости. Принимая во внимание, что INI-файл должен анализироваться каждый раз, когда он читается, и вам необходимо создать кеш самостоятельно. Для небольших файлов это нормально, но с сотнями строк, анализируемых при каждом запросе, он может возрасти до десятков миллисекунд, что довольно много для оптимизированной сети 200 мс.

Томаш Фейфар
источник