Чтобы можно было нормально работать с бд необходим экспорт/импорт бд. И мне хотелось иметь встроенное средство экспорта/импорта дампа бд в блоголёте. То есть, чтобы в админке можно было получить/восстановить дамп базы сайта. Естественно, не абсолютно все базы, а только тех таблиц, которые используются сайтом. Экспорт дело несложное - получить таблицы с нужным префиксом и сгенерировать текст.

Сложнее стояла задача импорта дампа. Вначале мне хотелось, чтобы можно было импортировать любой дамп. Но парсинг дампа, как впрочем и любой парсинг, задача нетривиальная. Я попытался найти готовое решение. Найденные решения оказывались либо просто примитивными (даже не было проверки на комментарии), либо слишком сложными с грязным, либо запутанным кодом. Попытался было адаптировать сторонний код, но бросил это занятие, ибо разобраться в хитросплетениях чужого кода мне оказалось не просто, жаль только потраченного времени.

С другой стороны я подумал - а за каким чертом движок должен парсить все на свете дампы? Вполне достаточно парсить только свой собственный дамп. Операция экспорта /импорта сайта будет по прежнему одинаковая: кнопка получить и загрузить. В версии с бд внутри архива будет еще присутствовать еще и дамп бд. Парсить придется только свой, сгенерированный блоголётом, дамп. А эта задача оказалась несложной - всего десяток строк на php.

Уже сейчас определился с версией с бд - она будет комбинированной, где часть данных будет храниться по старинке, а часть в бд. Например настройки TOptions будут в файле. Настройки будут включать в себя также логин и пароль к бд. То есть вначале будут создаваться как и сейчас две объекта: $classes и $options. Далее, если в опциях указано, что используется бд, то будет создаваться объект $db, который и поднимает коннект к бд. В админке можно будет редактировать параметры бд - собственно движок бд (mysql, sqlite, firebird и так далее), имя бд/логин/пароль/префикс таблиц. Напрямую лазить редактировать .php файлы для установки параметров бд не будет нужно.

Следующим вопросом стало установка часового пояса mysql. Часовой пояс (time_zone) особо ни на что не влияет, ну разве что на sql функции типа now, но правильный подход к бд требует установки часового пояса. Сейчас в блоголёте можно выбирать часовой пояс в админке настройки/дата и время. Выяснилось, что mysql на моем компе не понимает названия часовых поясов, хотя соответствующие таблицы имеется в спецкаталоге mysql. Выход нашелся следующий:


$timezone = date('Z') / 3600;
if ($timezone > 0) $timezone = "+$timezone";
$this->exec("SET time_zone = '$timezone:00'");

в таком виде часовой пояс нормально устанавливается для текущего соединения mysql. После всех этих разборок можно двигаться дальше в разработке версии блоголёта с бд.