Каков наилучший способ (с точки зрения программирования) для хранения конфигурации системы в приложении PHP? - PullRequest
7 голосов
/ 08 октября 2010

Примечание: Конфигурация хранится в файле PHP, config.php.

Я видел, как это делается по-другому, вот краткий список примеров (я храню БДинформация в этих примерах):

Константы: глобальные, только для чтения

define('DB_USER','user12');
define('DB_PASS','21user');

Использование массива GLOBALS: глобальные, изменяемые, повторяющиеся, смешанные с другими глобальными переменными

$GLOBALS['DB_USER']='user12';
$GLOBALS['DB_PASS']='21user';

Использованиенеглобальный массив, но с глобальным вызовом: возможно, хуже, чем второй вариант

$config=array(); ...

$config['DB_USER']='user12';
$config['DB_PASS']='21user';

... global $config;
    mysql_connect('localhost',$config['DB_USER'],$config['DB_PASS']);

Определение свойств класса: (глобальный, перечисляемый)

class Config {
    public $DB_USER='user12';
    public $DB_PASS='21user';
}

Критерии / параметры / функции:

  • простота кодирования: вам не нужно проверять, существует ли настройка, или инициализировать ее
  • простота изменения: не программист / неспециалист может легко изменить настройки
  • хранится в чистом месте: не смешивается с другими переменными (может храниться в подмассиве)
  • модификация времени выполнения: в некоторых случаях другие разработчики могут легко изменять существующие настройки

Конфигурация может потребоватьсязависает некоторое время во время работы системы, поэтому вариант 1 уже нежизнеспособен.Третий вариант тоже не слишком чистый.


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


Это довольно очевидный вопрос, и, учитывая, что я хорошо знаком с разными ответами, вы можетеСпросите, почему я делаю всю эту суету?Дело в том, что я разрабатываю фреймворк, и в отличие от других фреймворков (* ahem * joomla * ahem *), я не хочу пропустить их ошибку, заключающуюся в том, что они добавили неверное решение, которое в итоге должно быть изменено /переопределено в будущем.


Редактировать: Во-первых, расположение файла конфигурации меня не касается.Я позабочусь, чтобы люди могли легко менять местоположение, если они этого хотят, но это не будет требованием .Во-первых, дешевые хостинги не позволяют этого делать, во-вторых, что касается безопасности, то это действительно плохой вариант.Зачем?Потому что фреймворк должен знать, где находится конфиг.Действительно, безопасность через неизвестность не работает .Я бы предпочел исправить все RFI и XSS (например), чем быть параноиком при сокрытии файла конфигурации под несколькими слоями.

Ответы [ 4 ]

4 голосов
/ 08 октября 2010

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

2 голосов
/ 08 октября 2010

Почему бы не использовать Zend_Config? Он создает общий интерфейс для параметров конфигурации, которые можно сохранить в файле конфигурации или в базе данных (с соответствующим адаптером). И это легкий; вам не нужно вводить всю среду Zend для ее использования.

Кстати, поскольку вы создаете структуру, вы должны свести к минимуму загрязнение глобального пространства имен. Что-то вроде вашего третьего варианта, и если вы нацелены исключительно на 5.3, посмотрите на использование правильных пространств имен.

1 голос
/ 01 ноября 2010

Немного поздно, но это может вас заинтересовать: http://milki.include -once.org / genericplugins / genconfig.html

Предоставляет простой API для редактирования конфигурации PHPфайлы на месте.Он сохраняет комментарии и другой код в такте.И это позволяет использовать глобальный массив $ config / ArrayObject и определять константы.Он работает почти автоматически, если сочетается с комментариями конфигурации плагинов.Тем не менее, это много кода.Но, возможно, стоит проверить концепцию.(Я также использую читаемый config.php, так как он кажется мне наиболее полезным форматом конфигурации.)

0 голосов
/ 08 октября 2010

Поместите в общий файл и включайте его везде, где вам нужно. Преимущество, когда вы запускаете или переходите на свой тестовый сервер, вам просто нужно отредактировать только один этот файл, и все настройки будут изменены. Метод 2 лучше, так как позволяет изменить его.

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

...