В каком же формате лучше хранить конфигурацию сайта: php, json или в другом

191
23 декабря 2017, 06:24

Насколько вижу на англоязычном SO ответы на данный вопрос расходятся: здесь например пишут что

The best thing you can do is the simplest thing that could possibly work (php variables) and wrap it up in a class

А по ссылке https://stackoverflow.com/questions/10137211/how-to-set-save-the-variable-in-a-php-file добавляют, что перезаписывать переменные в php-файле конфигурации можно с помощью var_export

Но по той же второй ссылке в первом комменте к вопросу @Quentin призывает не использовать файл в формате php, а лучше "ini, JSON, XML, etc" (меня интересует только хранение в файле, а не в базе данных). А @symcbean обьясняет что проблему составляет не сам парсинг php-файла, а "the risks / stability / contention of self-modifying code".

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

Config::$var или Config::$array[1]

с php-файла, или взять

json_decode($json)->{"property"}

с файла в формате json.

Но действительно ли хранение конфигурации в php-файле имеет большие риски в сравнении с другими форматами? Тем более когда в .htaccess дописать

RewriteRule config.php - [F]

И собственно опять же главный вопрос: в каком же формате лучше всего хранить конфигурацию?

Возможно здесь на самом деле два вопроса: в каком формате файла и в каком формате данных, поскольку я видел как один человек хранит конфигурацию как json в javascript-файле

Answer 1

Я вот так делаю

;<?php /*
;Реквизиты для коннекта к LDAP
ldap_auth.user = userName
ldap_auth.pass = password

и разбираю его стандартным парсером ini-файлов

Тут надо понимать, что где-бы вы не хранили настройки(речь про файл), если web-сервер отдаст его злоумышленнику в исходном виде, то всё пропало. В этом плане .php, по сравнению с .json, .ini и т.д. имеет некоторые преимущества, поскольку сперва передается препроцессору PHP

Answer 2

Храню всегда в php в таком виде

<?php
define('DB_NAME', 'mydb');
define('DB_USER', 'user');
...........

Плюсы: удобно хранить и использовать. Т.к. это константы, то нет возможностью случайно перезаписать значение.

Только одно но. Я всегда создаю каталог include рядом с каталогом public и все инклуды и конфиги храню там. Т.е. структура получается такая

..
|--include
|--public
   |--index.php

В итоге, когда пользователь запрашивает http://mysite.com/ он получает файл public\index.php и до папки include злоумышленник может добраться только сломав FTP аккаунт

READ ALSO
Работа с символьным массивом

Работа с символьным массивом

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

242
Удаление\добавление пробелов

Удаление\добавление пробелов

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

286