Рассматривая различные примеры в одной из систем я увидел конфигурационный файл в .xml который подгружается классом DOMDocument потом заворачивается в массив и дальше служит для обращения частей системы.
Преимущества является то, что из админки можно с использованием JS напрямую менять параметры. Недостатком то, что при прочих равных можно открыть конфиг в браузере что влияет на безопасность.
Обмозговывая такой вариант осознал что не вижу всех недостатков отсюда не знаю стоит ли такой вид конфига применять в каком-то проекте? Потому что предотвратить загрузки в браузере можно поместив в защищенную сервером и серверной ОС папку? Однако может есть и другие недостатки?
_____________
Трус не играет в хокей
vagrand
3.02.2015 - 16:50
Любой файл можно открыть или скачать через браузер, если он доступен. Это не является аргументом. Что является аргументом, так это время, которое нужно затрачивать на парсинг данного конфига каждый раз при вызове страницы сайта. Если этот XML документ не очень большой, то данным аргументом можно принебречь. А вообще самый быстрый конфиг это естественно конфиг на языке самого PHP, который кстати тоже можно изменять программно.
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
По мне так недостаток его в том, что без сопутствующего софта
Цитата |
Преимущества является то, что из админки можно с использованием JS напрямую менять параметры |
править его - удовольствие сомнительное. Кроме того, его каждый раз нужно парсить через DOMDocument, что вообще печально.
Вообще не совсем понятно, конфига это или какие то данные. Конфигурационные файлы крайне редко правят из админки, обычно до её появления, как минимум в инсталляторе.
А если это локальные настройки или данные, то почему бы и нет.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Стало интересно насколько отличается по производительности разные варианты хранения конфигов. Вот результат:
Native:
float 0.04761791229248
Serialized:
float 0.18100309371948
INI:
float 0.27643799781799
JSON:
float 0.4108099937439
XML:
float 0.57854199409485
$time = microtime(true);
for($i=0;$i < 10000;++$i) {
$conf = include 'conf.php';
}
echo 'Native: ';
var_dump(microtime(true) - $time);
$time = microtime(true);
for($i=0;$i < 10000;++$i) {
$conf = unserialize(file_get_contents('conf.txt'));
}
echo 'Serialized: ';
var_dump(microtime(true) - $time);
$time = microtime(true);
for($i=0;$i < 10000;++$i) {
$conf = parse_ini_file('conf.ini');
}
echo 'INI: ';
var_dump(microtime(true) - $time);
$time = microtime(true);
for($i=0;$i < 10000;++$i) {
$conf = json_decode(file_get_contents('conf.json'));
}
echo 'JSON: ';
var_dump(microtime(true) - $time);
$time = microtime(true);
for($i=0;$i < 10000;++$i) {
$conf = new DOMDocument();
$conf->load('conf.xml');
}
echo 'XML: ';
var_dump(microtime(true) - $time);
return [
'section0' => [
'property0' => 'value0',
'property1' => 'value1',
'property2' => 'value2',
'property3' => 'value3'
],
'section1' => [
'property0' => 'value0',
'property1' => 'value1',
'property2' => 'value2',
'property3' => 'value3'
],
'section2' => [
'property0' => 'value0',
'property1' => 'value1',
'property2' => 'value2',
'property3' => 'value3'
],
'section3' => [
'property0' => 'value0',
'property1' => 'value1',
'property2' => 'value2',
'property3' => 'value3'
],
]
{
"section0": {
"property0": "value0",
"property1": "value1",
"property2": "value2",
"property3": "value3"
},
"section1": {
"property0": "value0",
"property1": "value1",
"property2": "value2",
"property3": "value3"
},
"section2": {
"property0": "value0",
"property1": "value1",
"property2": "value2",
"property3": "value3"
},
"section3": {
"property0": "value0",
"property1": "value1",
"property2": "value2",
"property3": "value3"
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<conf>
<section0>
<property0>value0</property0>
<property1>value1</property1>
<property2>value2</property2>
<property3>value3</property3>
</section0>
<section1>
<property0>value0</property0>
<property1>value1</property1>
<property2>value2</property2>
<property3>value3</property3>
</section1>
<section2>
<property0>value0</property0>
<property1>value1</property1>
<property2>value2</property2>
<property3>value3</property3>
</section2>
<section3>
<property0>value0</property0>
<property1>value1</property1>
<property2>value2</property2>
<property3>value3</property3>
</section3>
</conf>
a:4:{s:8:"section0";a:4:{s:9:"property0";s:6:"value0";s:9:"property1";s:6:"value1";s:9:"property2";s:6:"value2&qu ot;;s:9:"property3";s:6:"value3";}s:8:"section1";a:4:{s:9:"propert y0";s:6:"value0";s:9:"property1";s:6:"value1";s:9:"property2";s:6:"value2&qu ot;;s:9:"property3";s:6:"value3";}s:8:"section2";a:4:{s:9:"propert y0";s:6:"value0";s:9:"property1";s:6:"value1";s:9:"property2";s:6:"value2&qu ot;;s:9:"property3";s:6:"value3";}s:8:"section3";a:4:{s:9:"propert y0";s:6:"value0";s:9:"property1";s:6:"value1";s:9:"property2";s:6:"value2&qu ot;;s:9:"property3";s:6:"value3";}}
[section0]
property0 = value0
property1 = value1
property2 = value2
property3 = value3
[section1]
property0 = value0
property1 = value1
property2 = value2
property3 = value3
[section2]
property0 = value0
property1 = value1
property2 = value2
property3 = value3
[section3]
property0 = value0
property1 = value1
property2 = value2
property3 = value3