Ограничение размера для класса PHP zipArchive?

Я создаю zip-файл в PHP для загрузки пользователем. Я не получаю никаких ошибок от PHP или от проверки функции GetStatusString класса zipArchive. Но если я помещаю какие-то файлы в архив, то при попытке его открыть получаю ошибку "сжатая (заархивированная) папка недействительна или повреждена". Я проверил все файлы, которые добавляю, все в порядке. Единственное, о чем я могу думать, это то, что большие файлы вызывают проблемы. Но «большой» файл весит всего около половины мегабайта, и я не могу найти никакой документации об ограничении размера файла для zipArchive. Любые мысли о других вещах, чтобы попробовать, чтобы я мог отследить эту проблему? Спасибо.

Изменить: я сузил список до одного конкретного файла, который вызывает проблемы. Есть и другие, которые работают так же или больше, так что, пожалуй, отбросим эту мысль. Вот примеры имен файлов, которые работают нормально:

627 Jane.CCD.pdf
712 Example_DrNotes.pdf
625 Jane.Labs2.pdf

Да, в именах файлов есть пробелы... проблема с унаследованным кодом. Вот имя файла, которое не работает:

623 Джейн.Лаборатории.pdf

Не похоже, что это может быть проблема с именем файла. В конечном итоге это будет через Интернет, но я проверяю фактический zip-файл, который он создает на сервере, и именно здесь я получаю сообщение об ошибке.

Вот код:

$zip = new ZipArchive();
$zfileName = $GLOBALS["localUploadRoot"] . $zfile;
$requests = $this->getRequests(true);
foreach ($requests AS $r) {
    if (file_exists($GLOBALS["localInboundRequests"] . $r["file"])) {
        $zip->addFile($GLOBALS["localInboundRequests"] . $r["file"], $r["file"]);
    }
}
$zip->close();

Изменить 2: извините, я не могу опубликовать файл. В нем есть личная информация.


person SenorPuerco    schedule 12.08.2010    source источник
comment
Возможно, вам следует опубликовать соответствующие части вашего кода, где вы создаете zip-файлы. Конечно, файлы размером 500 КБ не вызывают проблем.   -  person Artefacto    schedule 13.08.2010
comment
Процесс создания на самом деле заканчивается? Можете ли вы показать код и примеры имен файлов, которые вы добавляете? У них случайно нет имен со специальными символами?   -  person Pekka    schedule 13.08.2010
comment
CLI или веб? Вы сначала сохраняете их на диск или «передаете» их непосредственно клиенту. (Если это последнее, убедитесь, что у вас нет сжатия zlib.)   -  person Matthew    schedule 13.08.2010
comment
Можете ли вы сделать этот файл доступным где-нибудь, чтобы мы могли посмотреть, сможем ли мы его сжать?   -  person Artefacto    schedule 13.08.2010


Ответы (3)


Ограничение для файлов в Zip-файлах составляет 4 гигабайта (размер несжатого файла), если вы не используете zip64, который еще не поддерживается в php. См. http://bugs.php.net/bug.php?id=51353.

person cweiske    schedule 24.09.2010

предел zip-файла составляет 4 ГБ (сжатый файл). если размер сжатого файла будет больше 4 ГБ, распаковка будет невозможна. Итак, лучший способ разделить ваш zip-файл на 4 ГБ.

person sanjeev ranjan    schedule 21.04.2011
comment
Чувак, ты только что спас мне жизнь! - person Sliq; 12.07.2012

Из-за естественного ограничения размера файла в 4 ГБ (вернее ~ 3,6 ГБ) для zip-файлов этот класс будет генерировать поврежденные файлы, размер которых превышает 4 ГБ. Использование tar.gz является подходящей альтернативой.

person Mahendra Jella    schedule 28.10.2014