Подтвердить что ты не робот

Каков наилучший способ хранения переменных конфигурации в PHP?

Мне нужно сохранить кучу информации о конфигурации в 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.

Что работает для вас в отношении хранения данных конфигурации, и какие наилучшие практики относятся к этому?

4b9b3361

Ответ 1

Я всегда ездил с опцией №2 и просто гарантировал, что никто, кроме владельца, не имеет никакого доступа к нему. Это самый популярный метод среди приложений PHP, таких как Joomla, vBulletin, Gallery и многие другие.

Первый метод слишком запутан для меня (читаемость), а третий - слишком опасный для WAY. Я никогда не думал о методе класса, поэтому кто-то другой может предоставить их вклад в этот класс. Но я догадываюсь, что это нормально, пока правильный доступ используется для использования класса.


Пример..

define('EXAMPLE1', "test1"); // scenario 1
$example2 = "test2"; // scenario 2

function DealWithUserInput($input)
{
   return eval($input);
}

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

Сценарий 2 вызовет только проблему, если вы сделаете его глобальным в функции. В противном случае это выходит за рамки и недоступно.

Ответ 2

Я бы сказал, что это также зависит от пользовательской базы. Если конфигурации должны быть очень удобными для пользователя или пользователь должен иметь возможность изменять конфигурацию через Интернет и т.д.

Я использую Zend Config Ini для этого и других параметров хранятся в SQL DB.

Ответ 3

Обычно я использую второй метод... При обработке соединений с базой данных я обычно открываю соединение в начале запроса, а затем закрываю его в конце. У меня есть функция, которая устанавливает соединение, а затем удаляет имя пользователя/пароль из глобального массива (с помощью функции unset()). Это предотвращает доступ других частей системы к "чувствительным" данным соединения mysql.

Ответ 4

У меня также есть опция 2 для большинства значений конфигурации. Если бы вы собирались реализовать класс, я бы привязал определенные значения к классу, на который он влияет, а не на общий класс конфигурации.

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