ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Сохраняем конфиг файлы (array_export) (https://forum.antichat.xyz/showthread.php?t=783410)

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

[OFF]Почему не использовать yaml\yml файлы?)[/OFF]

Mex-Vision 04.05.2022 14:31

Цитата:

Сообщение от Desquire

[OFF]Почему не использовать yaml\yml файлы?)[/OFF]

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

Solution 04.05.2022 17:28

Цитата:

Сообщение от Mex-Vision

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

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

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

Mex-Vision 04.05.2022 18:40

Цитата:

Сообщение от Solution

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

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

Gaikotsu 04.05.2022 21:27

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

Mex-Vision 05.05.2022 05:58

Цитата:

Сообщение от Gaikotsu

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

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


Время: 10:53