Предоставить глобальную информацию в приложении php (безопасный способ) - PullRequest
1 голос
/ 14 июля 2011

Как можно предоставить глобальную информацию (пути, пароли БД, часовой пояс, ...) в приложении PHP? Я знаю, что глобальные переменные небезопасны, но как обычные CMS справляются с этой проблемой? Я уже смотрел на Wordpress, но WP не славится высокими стандартами безопасности.

Я прочитал немного о Dependency Injection, но является ли это обычным способом справиться с этим?

В целом, я хочу предоставить тип глобальной (но контролируемой *) информации.

* Можно ли контролировать предоставленные данные таким образом, чтобы только авторизованные объекты получали необходимую информацию?

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Вы можете использовать файлы конфигурации (.ini), это легко использовать с этой функцией PHP parse_ini_file.

Вы можете использовать это так:

config.ini

[global-information] 

path : your_path
DB_passwords : your_password
Timezone : your_timezone

В вашем php-файле вы можете получить глобальную информацию, подобную этой

$ini_array= parse_ini_file("config.ini",true);

$path = $ini_array['global-information']['path'];
1 голос
/ 14 июля 2011

Внедрение зависимостей не имеет ничего общего с безопасностью.Это шаблон проектирования, стратегия для решения типичной проблемы с использованием хорошо структурированной структуры.

Обычно я готовлю класс CSettings, который предоставляет метод для всех типов информации, но все в общем виде с помощью средств.методов.

Затем, при использовании в конкретном приложении, я делю CSettings таким образом, что он возвращает правильные / конкретные значения для конкретного приложения.

Другой способ продвижения информации, может быть, например, шаблон реестра.

0 голосов
/ 14 июля 2011

Есть много школ мысли об этом. Самая простая реализация - это, вероятно, глобальный файл конфигурации, который устанавливает константы, используя define()

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

http://misko.hevery.com/2009/01/14/when-to-use-dependency-injection/

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

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

...