Приветствую! Есть желание сделать блог, который будет кушать markdown файлы, которые будут разбиты по директориям согласно иерархии рубрик (т.к. локально будет точно также). Потом можно будет на perl или sh написать простой пуш файлов с ПК на ftp, если такого еще никто не делал.
В общем, в чем соль. Хочется максимально простого решения (ага, мечты), но с возможностью сортировки записей по дате и рубрикам. Есть такой движок блога как jekyll и ему подобные, например, kirby. (Хотя последний сложно отнести к платформе блога.) Все они по своему интересны, но не без нюансов. Например, jekyll критичен к наименованию файлов, а рубрики указываются в шапке файлов markdown.
Пока рассматривал разные варианты ради интереса написал простую функцию, которая формирует массив из файлов и каталогов из указанной директории:
function listFolderFiles($dir){
$files_array = scandir($dir);
unset($files_array[array_search('.', $files_array, true)]);
unset($files_array[array_search('..', $files_array, true)]);
if (count($files_array) > 0) {
$mass_array = [];
foreach ($files_array as $files_array_elem) {
$mass_array_inner = [];
$mass_array_inner['name'] = $files_array_elem;
$mass_array_inner['time'] = gmdate("Y-m-d;H:i:s", filemtime($dir . '/' . $files_array_elem));
if (is_dir($dir . '/' . $files_array_elem)) {
$mass_array_inner['type'] = 'directory';
$mass_array_inner['inner'] = listFolderFiles($dir . '/' . $files_array_elem);
} else {
$mass_array_inner['type'] = 'file';
}
$mass_array[] = $mass_array_inner;
}
return $mass_array;
} else {
return;
}
}
Потестил ее на скорость работы, закинув на тестовый сервер с проектом на более, чем 37 000 файлов и вывел массив как html список. Время от запроса сервера до полного формирования страницы заняло около 10 секунд, а только формирование массива - почти пол секунды. Для сравнения wp на другом тестовом с пачкой плагинов и около 100 записей занимает 1,2 секунды. Хотя, вы и без меня все это знаете.
В целом скорость работы устраивает (учитывая, что она снизится при чтении каждого файла в строку, чтобы вытянуть шапку с данными как у jekyll), но печалит то, какая огромная работа будет совершаться каждый раз при открытии страницы блога со списком записей. Именно это заставляет смотреть в сторону БД, чтобы проще было сортировать записи.
И вот теперь не могу определиться с тем каким путем лучше пойти: только file-based или дополнить какой-то БД, например, sqlite для хранения ссылок на файлы, их дат публикации и, возможно, рубрики и какие-то теги. Но тогда (при БД) нужно будет дописать что-то на вроде админки, чтобы раз в какой-то период времени обновлять базу. Хотя, можно разбавить кроном...
В общем, делитесь своими мыслями, советами, практиками и т.д. В целом интересуют ваши размышления не только по моему вопросу, но и в целом вокруг темы, указанной в заголовке, какие варианты применяли и с какими проблемами сталкивались.
Заранее благодарю участвующих за советы и критику!