В коде выдачи случайно нет закрывающего пхп тэга? Вдруг после него лишние пробелы?
попробуй еще отправлять заголовок header('Content-Length: ' . $size);
попробуй на всякий случай делать ob_clean перед отдачей, и exit после.
ну а вообще да, не стоит превращать базу в хранилище файлов.
можно внедрить механизм ревизий.
в текущий момент активна одна ревизия, при изменении данных создается новая ревизия со статусом аля "требует модерации". соответственно ее модератор может сделать активной.
1. sql - select все страницы from database
2. php foreach это все
3. php -регуляркой проверять наличие формы
4. php -регуляркой же заменять
5. sql - update record in database