Управление памятью и класс ZipArchive в PHP - PullRequest
2 голосов
/ 21 декабря 2009

У меня есть PHP-скрипт, который добавляет много маленьких файлов в один и тот же zip-архив, используя класс PHP ZipArchive.

Недавно в сценарии стало не хватать памяти , хотя архив большой, но я добавляю только небольшие файлы один за другим, каждый раз, когда мне нужно добавить файл, можно безопасно открывать архив.

Исходный файл архива вырос понемногу до 50 МБ, поэтому я предполагаю, что добавление небольших файлов не является проблемой, реальная проблема может заключаться в том, что всякий раз, когда класс ZipArchive добавляет файл распаковывает весь архив в память. Это правильное предположение, так ли это?

1 Ответ

1 голос
/ 29 декабря 2009

Управление памятью не является сильной стороной PHP. Я не вижу в руководстве ничего, что могло бы подтвердить или развеять идею о том, что весь архив распакован в память, но я думаю, что это так.

Попробуйте сравнить возвращаемое значение $zip->open() с ZIPARCHIVE::ER_MEMORY - если они равны, это должно подтвердить, что PHP открывает весь архив в памяти.

Другой способ подтвердить это - сравнить параметр memory_limit (http://us2.php.net/manual/en/ini.core.php#ini.memory-limit) с размером zip-файла.

...