1Bot пишет:- откуда известно в скольки файлах располагается тема?
Для этого предназначен файл post_places.php, формат которого: "номер_поста => номер_файла_темы". При манипуляциях с темой мы постоянно обращаемся не к файлу темы, а к этому файлу, как реестру темы. При этом в процессе например удаления поста проверяется соответствие фактическому количеству постов в файле, с записью в файле реестра, и если что не так то пишем в эррор лог.
1Bot пишет: какая последовательность сообщений в файлах темы?
Попытаюсь рассказать более подробно, чтобы было понятней механизм работы.
При добавлении нового поста создаётся папка с темой, а в ней первый файл темы, затем файл реестра, который я упоминал выше, а также файл pin_posts.php, в котором хранятся прикреплённые посты.
Производится соответствующие записи в в файлы allforums.php и list.php.
Далее, при последующем добавлении постов, посты добавляются в этот первый файл темы до 60 поста(цифра может быть иной, но я выбрал эту). После 60 поста, автоматически создаётся второй файл темы, в который добавляется 61 пост. По ходу делаются соответствующие записи в файл реестра. И так далее.
К слову сказать, я уже реализовал этот механизм, и проверил при добавлении более 60 постов. Всё работает, в том числе множественное прикрепление и открепление постов.
При удалении поста, открываем файл реестра, смотрим в каком файле находится пост, затем открываем соответствующий файл темы и удаляем пост из темы.Сразу же проверяем: если пост последний в файле, то удаляем файл, и удаляем запись из реестра. Иначе, если следующий файл темы существует, то проверяем количество постов в нём, и если там менее половины или ровно половина(30) постов, и в том файле, из которого удалили пост тоже менее половины или ровно половина, то ОБЬЕДИНЯЕМ эти два файла в один! Здесь ПРИНЦИПИАЛЬНЫЙ момент! Далее ничего не перестраиваем.
При таком механизме в первом файле темы может быть от 1 до 60 сообщений в любом случае: сколько бы файлов не было, но в следующем файле темы НЕ может быть менее 30 сообщений, то есть все последующие файлы не могут иметь менее половины сообщений. При этом в файле topic.php, реализуется механизм вывода постов такой:
Из функции printPaginator(), получаем (в переменной first) индекс начального поста, а также инфо количества постов на страницу из файла профиля пользователя. Затем из файла реестра темы получаем список с записями от начальной позиции + кол. постов на страницу. В соответствии с этим списком открываем соответствующий файл темы, к тому же, если некоторые посты в следующем файле, то второй файл темы и получаем список постов на страницу, прикрепляем к нему прикреплённые посты если они есть, и выводим.
Тут надо заметить, что юзер получает право выбрать произвольное количество постов на страницу, но только до определённого уровня. при 60 постов на файл темы, юзер имеет возможность выбрать от 1 до 30 постов на страницу. В большинстве случаев этого достаточно.
При такой схеме мы в худшем случае откроем всего два файла темы.
Если до сих пор не ясен механизм, то его можно будет пощупать в реальном движке.
Немножко сложновато? Но ведь мы не ищем лёгких путей. Сейчас тупо качается вся тема, и, конечно так легче программировать, но так программировать нельзя.
1Bot пишет:- как производить все манипуляции объединения при MSFIOA (Multiprocess Simultaneous File Input Output Access / многопроцессный одновременный файловый ввод вывод)?
Это тоже предусмотрено. Перед данными манипуляциями предварительно прописываем в файле list.php инфо что тема закрыта для изменений. После манипуляций открываем тему. Хотя можно закрыть только эти файлы, в которых меняем, а юзеру выдать заглушку.