То, что вы хотите называется фреймворком. Обычно берут какой-то вроде пресловутого Symfony и описывают модель.
Подобная CMS не может быть легкой по определению, т.к. это плата за универсальность. Меня немного смущает то, что вы не далаете это на вышеозвученной Wagtail.
У MySQL может быть внутренняя кодировка одна, для соединений другая, для базы третья, а для таблицы четвертая и для вывода результатов пятая. А теперь не забудьте, какая кодировка у вас используется в PHP? 99% жалоб на кракозябры связаны с тем, что люди не умеют хранить данные в правильной кодировке и корректно с ними обращаться. Я столько раз встречался с тем, что люди использовали latin1 таблицы, в которые они писали win1251 и жаловались на то, что у них все не работает. А потом с удивлением открывали для себя, что в MySQL есть и полнотекстовый поиск и нормальная сортировка и т.д. Разберитесь с кодировками один раз и забудьте об этом, как о страшном сне.
Paul Denisevich: я согласен. Но, если нельзя подключить серверный обработчик и нельзя пользоваться сторонними сервисами - это единственный способ, при котором можно частично решить поставленную задачу.
polifill: начну с того, что таскать дампы баз не очень хорошая практика сама по себе, но иногда приходится идти на это. Специально для таких случаев был придуман https://git-lfs.github.com/
Почему я так ратую за git? Это первый шаг к тому, чтобы разработчик вырастал из говно-кодера в профессионала. Просто люди прирастают к этим вещам, для них становится нормой таскать файлы на флешке, заливать через фтп, править на сервере, писать код абы как лишь бы работало. Т.к. такие люди долго не задерживаются на одном проекте, то наученные горьким опытом люди начинают искать профессионалов и когда они приходят, волосы встают дыбом и выкатывается огромный счет на вычищение грязи. В итоге у заказчика создается впечатление от того, что программисты только все ломают и ничего не могут починить.
staffID: Цифровая подпись проверяется сервером, а не конкретным файлом. Вы не понимаете как работает веб-сервер.
Смотрите, сначала ваш запрос попадает в веб-сервер, веб-сервер его разбирает на составные части, делает необходимые модификации в адресе (рерайты), затем может передавать управление модулям, которые тоже могут что-то делать с запросом. Просто смысл в том, что то, как выглядит адрес может не иметь ничего общего с тем, как он хранится. Плюс большие компании могут позволить доработать существующий веб-сервер так, чтобы он служил их целям.
Например в вашем случае путь к картинке может выглядеть так: `//server.tld/image-specific-session/pictureId.ext`, вы можете передавать этот адрес php скрипту, который проверит, если у пользователя с сессией доступ к картинке и потом прочитать тело картинки из каталога, доступ к которому ограничен.