Лучшее место для хранения базы данных и настроек локальной конфигурации

#php

#php

Вопрос:

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

Изначально я хочу сохранить настройки моей базы данных и локальные настройки, такие как Dataformate, Currency formate и т.д., В классе конфигурации, доступном для любого приложения where без использования include.

И мне понадобится хороший класс контроллера, я не хочу использовать никакой фреймворк!

Заранее большое спасибо за помощь.

Ответ №1:

Кто-нибудь может поправить меня, если я ошибаюсь, но я не верю, что вы можете устанавливать переменные PHP без использования include, и даже если бы вы могли, это было бы плохой идеей. Любой, кто будет поддерживать ваш код позже, будет очень смущен, если бы это было возможно.

Что вы можете сделать, это создать __autoload функцию (см.: http://php.net/manual/en/language.oop5.autoload.php ) который загружает класс с вашими переменными, когда вам это нужно. Однако это дороже, чем просто жесткое включение файла.

Как вы могли бы создать автозагрузчик

index.php:

 <?php

include("autoloader.inc.php");

$vars = new settings(); //this procs the __audoload() function
  

autoloader.inc.php:

 <?php

function __autoload($class) {
    include $class . '.php';
}
  

settings.php:

 <?php

//settings functions
date_default_timezone_set('America/Los_Angeles');
//... more stuff


//variable container class
class settings {
    public static $dbuser = "billybob";
    //... more stuff
}
  

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

Ответ №2:

Если вы хотите каждый раз включать файл в свое приложение и предполагаете, что каждый запрос обрабатывается index.php вы можете сделать как,

 $lib_paths = array();
$lib_paths[] = "c:/web/htdocs/appname/lib";  // you can more paths in this array
$inc_path = implode(PATH_SEPARATOR, $lib_paths);
set_include_path($inc_path);
  

предполагая, что в lib есть ваш конфигурационный класс / файл.

Если вы ищете класс контроллера и, как вы сказали, вы новичок, я бы рекомендовал прочитать

Профессиональный PHP: шаблоны, фреймворки, тестирование и многое другое от Кевина Макартура

Это даст вам представление о создании ваших контроллеров и других компонентов MVC

надеюсь, это поможет

Ответ №3:

Сохраняйте все переменные конфигурации в файлах ini или yaml (недоступный путь к веб-серверу). Я предпочитаю файлы Yaml. Потому что это удобнее, чем ini.

Для чтения ini-файлов вы можете использовать функцию parse_ini_file() в php. Для yaml используйте компоненты symfony YAML.

Создайте базовый класс конфигурации для его чтения.

Ответ №4:

При запуске apache вы можете использовать SetEnv для настройки переменной, которая будет доступна в любом php-скрипте с помощью getenv() для доступа к ней.

итак, в httpd.conf у вас может быть

 SetEnv CurrencyFormat SomeFormat
  

и вы могли бы получить доступ к своему коду следующим образом:

 $currencyFormat = getenv('CurrencyFormat');
  

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