Я создаю класс для создания ZIP-файлов в PHP. Альтернатива ZipArchive, предполагающая, что это не разрешено на сервере. Что-то, что можно использовать с этими бесплатными серверами.
Это уже работает, создайте структуры ZIP с помощью PHP и используйте gzdeflate() для создания сжатых данных.
Проблема в том, что gzdeflate() требует от меня загрузки всего файла в память, и я хочу, чтобы класс работал с ограничением в 32 МБ памяти. В настоящее время он хранит файлы размером более 16 МБ без сжатия.
Я предполагаю, что мне нужно заставить его сжимать данные в блоках, 16 МБ на 16 МБ, но я не знаю, как объединить результат двух gzdeflate().
Я тестировал его, и кажется, что он требует некоторой математики в последних 16 битах, вроде buff->last16bits = (buff->last16bits & newblock->first16bits) | 0xfffe
, это работает, но не для всех образцов...
Вопрос: как соединить два DEFLATE-потока, не распаковывая их?