Чем создать файл config php

Создание файла конфигурации в PHP

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

4) Используйте INI-файл. 5) Используйте файл YAML. 6) Используйте файл JSON. 7) . Есть так много способов . Определите некоторые критерии, по которым можно судить, по крайней мере, нет общего «лучшего».

Я использую способ, которым Laravel делает это (когда не используется Laravel, который есть). Я создаю класс, который загружает определенный файл конфигурации в зависимости от имени хоста. Затем я вызываю его с помощью Config::get(‘key’); , pastebin.com/4iTnjEuM

10 ответов

Одним простым, но элегантным способом является создание файла config.php (или того, что вы называете), который просто возвращает массив:

$configs = include('config.php'); 

Мне также нравится этот метод — я думаю, что он чище, чем просто объявить переменную во включенном файле и предположить, что она будет в вашем скрипте

Использование INI файла — это гибкое и элегантное решение! PHP имеет встроенную функцию для правильной обработки. Например, можно создать файл INI следующим образом:

Итак, единственное, что вам нужно сделать, это позвонить:

$ini = parse_ini_file('app.ini'); 

Затем вы можете легко получить доступ к определениям с помощью массива $ini .

echo $ini['db_name']; // mydatabase echo $ini['db_user']; // myuser echo $ini['app_name']; // mypassword 

ВАЖНО: По соображениям безопасности файл INI должен находиться в общедоступной папке

Это также безопасно использовать? Если пользователь угадает путь к INI-файлу и перейдет туда в своем браузере, увидят ли они, что находится в файле?

@NickGames, вы должны поместить файл в непубличную папку, иначе вы будете под серьезной угрозой безопасности

@danny, я уже использовал INI-файл в общих хостингах, и это было очень легко. Может быть, вы что-то не так поняли.

@MarcioMazzucato У меня были проблемы, когда я писал о Godaddy. Чтение возможно, но запись ini-файлов не работает.

Мне нравится этот подход. Бонусный совет: переименуйте файл в app.ini.php. Затем добавьте в первую строку ; В случае, если этот файл случайно появится в общей папке, он будет рассматриваться как файл PHP и умрет в первой строке. Если файл читается с помощью parse_ini_file , первая строка будет рассматриваться как комментарий из-за ; ,

Я использую небольшую эволюцию решения @hugo_leonardo :

 'localhost', 'username' => 'root', 'pass' => 'password', 'database' => 'db' ); ?> 

Это позволяет использовать синтаксис объекта при включении php: $configs->host вместо $configs[‘host’] .

Кроме того, если ваше приложение имеет настройки на стороне клиента (например, для приложения Angular), вы можете иметь этот файл config.php , содержащий все ваши конфиги (централизованные в одном файле вместо одного для JavaScript и один для PHP). Тогда трюк должен был иметь еще один PHP файл, в котором echo была только информация о стороне клиента (чтобы не показывать информацию, которую вы не хотите показывать, как строка подключения к базе данных). Позвоните, скажите get_app_info.php :

Читайте также:  Создать свой словарь python

Вышеприведенное предположение, что ваш config.php содержит параметр app_info :

 'localhost', 'username' => 'root', 'pass' => 'password', 'database' => 'db', 'app_info' => array( 'appName'=>"App Name", 'appURL'=> "http://yourURL/#/" ) ); ?> 

Таким образом, информация о вашей базе данных остается на стороне сервера, но ваша информация о приложении доступна из вашего JavaScript, например, тип вызова $http.get(‘get_app_info.php’).then(. ); .

Создание объекта значительно упрощает обработку данных. Это позволяет, например, получить все параметры app_info в JavaScript в виде JSON с минимальным количеством строк кода.

У объектов также есть побочный эффект передачи по ссылке с PHP 5. Это может или не может быть хорошей вещью. Массивы передаются по значению (но реализованы как COW), поэтому может быть лучше использовать массивы config вместо объектов config.

@BoDeX BoDeX Мне всегда нравится этот способ, и он кажется наиболее популярным в большинстве статей, но как мне получить к нему доступ через класс? Я прочитал в статье о безопасности, что создание глобальных переменных не очень хорошая идея, так что вы предлагаете?

Я довольно удивлен принятым ответом здесь, и количество его возвышений. За исключением ответа Марсио Маццукато, нет обсуждения относительных достоинств/слабых сторон любого из нескольких подходов.

Параметры, которые я вижу, следующие:

Механизмы на основе файлов

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

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

Типичные форматы файлов, используемые для файлов конфигурации, — это PHP-код, ini-форматированные файлы, JSON, XML, YAML и сериализованный PHP

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

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

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

Если конфигурация создается из инструмента, может быть возможно проверить данные в инструменте, но нет стандартной функции для удаления данных для встраивания в PHP-код, как это существует для HTML, URL-адресов, операторов MySQL, команд оболочки.

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

Сброс содержимого, записанного в файл, обрабатывается автоматически.

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

Читайте также:  Python ip camera stream

Структурированный файл

Сохранение в качестве INI файла, как было предложено Marcel или JSON или XML, также предоставляет простой api для сопоставления файла в структуру данных PHP (и, за исключением XML, для удаления данных и создания файла) при устранении уязвимость вызова кода с использованием сериализованных данных PHP.

Он будет иметь схожие характеристики производительности с сериализованными данными.

Хранилище базы данных

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

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

Условия выполнения

Вы можете установить значения в среде исполнения. PHP работает.

Это устраняет любые требования для того, чтобы PHP-код выглядел в определенном месте для конфигурации. OTOH не очень хорошо масштабируется для больших объемов данных и его трудно изменить повсеместно во время выполнения.

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

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

Сетевые каталогиЕще одно интересное место для хранения информации о конфигурации — в DNS/LDAP. Это будет работать для небольшого количества небольших фрагментов информации, но вам не нужно придерживаться 1-й нормальной формы — рассмотрите, например, SPF,

Подсистема поддерживает кэширование, репликацию и распространение. Следовательно, он хорошо работает для очень больших инфраструктур.

Системы контроля версий

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

Я не согласен с разделом « File based mechanisms », вы можете добавить его, например, в одноэлементную модель и назвать его там, где вы хотите. Но я приму ваш ответ, потому что вы добавляете много опций, я думаю, прежде чем я знаю все опции.

Хорошо — было бы сложно хранить данные конфигурации базы данных в базе данных — не так ли?

Но на самом деле, это довольно сильно упрямый вопрос, потому что любой стиль действительно работает, и все это зависит от предпочтений. Лично я бы выбрал переменную конфигурации, а не константы — вообще, потому что мне не нравятся вещи в глобальном пространстве, если это необходимо. Ни одна из функций моей кодовой базы не должна иметь возможности легко получить доступ к моему паролю базы данных (кроме моей логики подключения к базе данных), поэтому я бы использовал его там, а затем, вероятно, уничтожил его.

Читайте также:  Java copy text to file

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

Источник

PHP config

PHP config tutorial shows how to create configuration files in PHP. It uses the hassankhan/config package.

$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) .

The hassankhan/config is a lightweight configuration file loader that supports PHP, INI, XML, JSON, and YAML files. If we work with YAML files, we need to install symfony/yaml package.

Setting up PHP config

First, we install the necessary packages.

$ composer req hassankhan/config symfony/yaml

We install two packages with composer.

This is composer.json file. We also enable autoloading.

PHP config JSON example

In the first example, we read the configuration data from a JSON file.

We have db.json in the config directory.

get('app.port') . "\n"; echo $conf->get('db.host') . "\n"; echo $conf->get('db.port') . "\n"; echo $conf->get('db.name') . "\n";

We load the configuration file either with Config::load or Config . The values are retrieved with the get method. The dot character is used to go through the hierarchy of attributes.

$ php read_json_cfg.php 3000 localhost 27017 ydb

PHP YAML example

In the second example, we read configuration data from a YAML file.

app: port: 3000 db: host: localhost port: 27017 name: ydb
get('app.port') . "\n"; echo $conf->get('db.host') . "\n"; echo $conf->get('db.port') . "\n"; echo $conf->get('db.name') . "\n";

The example reads configuration file from the db.yaml file.

$conf = new Config('config/db.yaml', new Yaml);

In the second parameter, we provide the configuration parser.

$ php read_yaml_cfg.php 3000 localhost 27017 ydb

Merging configuration files

The merge method groups configuration files.

app: port: 3000 db: host: localhost port: 27017 name: ydb

This is the first configuration file.

This is the second configuration file.

merge($conf2); echo $conf->get('db.port') . "\n"; echo $conf->get('db.name') . "\n"; echo $conf->get('version') . "\n";

In the example we merge the two configuration files. We can access attributes from both files with one object.

Code configuration with AbstractConfig

We can specify the configuration details in code by using AbstractConfig .

 'localhost', 'port' => 80, 'servers' => [ 'host1', 'host2', 'host3' ] ]; > >

The configuration is specified in the AbstractConfig’s getDefaults file.

get('host') . "\n"; echo $conf->get('port') . "\n"; echo $conf->get('servers')[0] . "\n";

The example reads the configuration from the code.

In this tutorial, we have shown how to read configuration files in PHP with hassankhan/config package.

Источник

Оцените статью