Мне нужно сохранить кучу информации о конфигурации в PHP.
Я рассмотрел следующее ….
// Doesn't seem right. $mysqlPass = 'password'; // Seems slightly better. $config = array( 'mysql_pass' => 'password' ); // Seems dangerous having this data accessible by anything. but it can't be // changed via this method. define('MYSQL_PASSWORD', 'password'); // Don't know if this is such a good idea. class Config { const static MYSQL_PASSWORD = 'password'; }
Это все, о чем я думал до сих пор. Я намерен импортировать эту конфигурационную информацию в свое приложение с require /config.inc.php
.
Что работает для вас в отношении хранения данных конфигурации, и что является наилучшей практикой в этом отношении?
Я всегда ездил с вариантом №2 и просто гарантировал, что никто, кроме владельца, не имеет никакого доступа к нему. Это самый популярный метод среди приложений PHP, таких как Joomla, vBulletin, Gallery и многие другие.
Первый метод слишком запутан для меня (читаемость), а третий – слишком опасный для ПУТЬ. Я никогда не думал о методе класса, поэтому кто-то другой может предоставить их вклад в этот класс. Но я думаю, это нормально, если для использования класса используется правильный доступ.
Пример..
define('EXAMPLE1', "test1"); // scenario 1 $example2 = "test2"; // scenario 2 function DealWithUserInput($input) { return eval($input); }
Теперь этот пример кода действительно тупой, но просто пример. Подумайте, что может быть возвращено функцией в зависимости от того, какой сценарий пользователь может попытаться использовать на своем входе.
Сценарий 2 вызовет проблему только в том случае, если вы сделали его глобальным в функции. В противном случае он выходит за рамки и недоступен.
Я бы сказал, что это также зависит от пользовательской базы. Если конфигурации должны быть очень удобными для пользователя или пользователь должен иметь возможность изменять конфигурацию через сеть и т. Д.
Я использую Zend Config Ini для этого, а другие настройки хранятся в SQL DB.
Обычно я использую второй метод … При обработке соединений с базой данных я обычно открываю соединение в начале запроса, а затем закрываю его в конце. У меня есть функция, которая устанавливает соединение, а затем удаляет имя пользователя / пароль из глобального массива (с помощью функции unset ()). Это предотвращает доступ других частей системы к «чувствительным» данным соединения mysql.
У меня также есть опция 2 для большинства значений конфигурации. Если бы вы собирались реализовать класс, я бы привязал определенные значения к классу, на который он влияет, а не на общий класс конфигурации.
В вашем примере ваш класс будет подключен к базе данных, и экземпляр сохранит пароль, имя db_ и т. Д. Это будет правильно инкапсулировать данные, а также обеспечить легкое средство для создания нескольких соединений, если это когда-либо понадобилось.