PDA

Просмотр полной версии : Сохраняем конфиг файлы (array_export)


Mex-Vision
04.05.2022, 08:36
На днях было необходимо сохранять массивы в конфиг файлы, написал функцию для преобразования массива в строковое представление. Возможно кому-то будет нужно, оставлю тут.

PHP:



/**
* Возвращает интерпретируемое строковое представление массива.
* @param array $array Массив.
* @param bool $beautify Форматировать ли возвращаемую строку.
* @return string Интерпретируемое строковое представление массива.
*/
function
array_export
(
array
$array
,
bool
$beautify
,
int
$iteration
=
0
)
:
string
{
if
(
empty
(
$array
)
)
return
"[]"
;
$tab
=
$beautify
?
str_repeat
(
"\t"
,
$iteration
)
:
""
;
$result
=
$beautify
?
"[\n"
:
"["
;
$count
=
count
(
$array
)
;
foreach
(
$array
as
$key
=
>
$val
)
{
$count
--
;
$result
.
=
$beautify
?
(
$tab
.
"\t"
)
:
""
;
$result
.
=
to_array_element
(
$key
)
;
$result
.
=
$beautify
?
" => "
:
"=>"
;
if
(
is_array
(
$val
)
)
$result
.
=
array_export
(
$val
,
$beautify
,
$iteration
+
1
)
;
else
$result
.
=
to_array_element
(
$val
)
;
$result
.
=
(
$count
>
0
)
?
","
:
""
;
$result
.
=
$beautify
?
"\n"
:
""
;
}
return
$beautify
?
$result
.
$tab
.
"]"
:
$result
.
"]"
;
}
function
to_array_element
(
$value
)
:
string
{
if
(
is_int
(
$value
)
or
is_float
(
$value
)
)
return
$value
;
if
(
is_bool
(
$value
)
)
return
var_export
(
$value
,
true
)
;
if
(
is_null
(
$value
)
)
return
'null'
;
if
(
is_object
(
$value
)
)
return
get_class
(
$value
)
.
"::class"
;
return
'"'
.
(
(
string
)
$value
)
.
'"'
;
}


Кормим массив, и получаем его строковое представление. В отличии от var_export использует синтаксис массивов PHP 5.4+ и поддерживает форматирование (табуляция, переносы строк и т.п.).

Как использовать?

PHP:



$config = [
'config' => [
'float' => 1.2,
'string' => 'str',
'bool' => true,
'null' => null,
'object' => new \mmopane\validate\Validator(),
]
];

file_put_contents("config.php", " [
"float" => 1.2,
"string" => "str",
"bool" => true,
"null" => null,
"object" => mmopane\validate\Validator::class
]
];

Desquire
04.05.2022, 14:12
Почему не использовать yaml\yml файлы?)

Mex-Vision
04.05.2022, 14:31
Почему не использовать yaml\yml файлы?)


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

Solution
04.05.2022, 17:28
Они в браузере палятся. Понимаю что можно и нужно выносить за директорию веб сервера, но это донастройка и т.п. Можно и env использовать, да хоть xml, лишь бы выше точки входа.


nginx можешь конфигурировать как тебе нравится, будет показывать только то что указано

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

Mex-Vision
04.05.2022, 18:40
nginx можешь конфигурировать как тебе нравится, будет показывать только то что указано
А вообще по конфигу, в .env вынести основные настройки бд и прочего что необходимо для функционирования сайта, при инсталле cms их заполнять, остальной конфиг пользовательский хранить в бд, при первой загрузки дергать в синглтон и юзать его


Можно и так=) Суть не в том как нужно и правильно делать. Я просто поделился огрызком кода, возможно кому-то пригодится)

Gaikotsu
04.05.2022, 21:27
а чем использование функций serialize / unserialize не устроило?

Mex-Vision
05.05.2022, 05:58
а чем использование функций serialize / unserialize не устроило?


Конфиги в txt файлах в формате json?