Отмена PHP при создании большого файла .zip - PullRequest
9 голосов
/ 21 апреля 2011

Мой php-скрипт работает на CentOS 5.6 и PHP 5.2.12 с использованием ZipArchive () и успешно создает .zip-файлы размером более 1,6 ГБ, но не для более крупного архива объемом 2 ГБ или более - PHP прерывается без явной ошибки. Ничего в журнале ошибок PHP или stderr. Сценарий выполняется в строке cmd, а не в интерактивном режиме.

Сценарий работает около 8 минут, и временный архив увеличивается, и при проверке размера файла последний листинг показал, что размер файла tmp был 2120011776, а затем файл tmp исчезает, а сценарий PHP падает через логику и выполняет код после архив создать.

По какой-то причине top показывает, что процессор все еще находится на 95% и создает новый архивный файл tmp - он делает это, скажем, еще 5+ минут, молча останавливается и оставляет незавершенный архивный файл tmp. В этом тесте было меньше 4000 ожидаемых файлов.

Сценарий, как отмечалось, прекрасно работает при создании небольших архивных файлов.

Протестировано на нескольких разных наборах больших исходных данных - тот же результат для больших файлов.

Эта проблема звучит похоже на этот вопрос: Ограничение размера в классе PHP zipArchive?

Я подумал, что, возможно, команда ls -l возвращает количество блоков по 2 КБ, и поэтому 2120011776 будет близко к 4 ГБ, но этот размер в байтах - размер файла xxxx.zip.tmpxx.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 11 февраля 2014

Это может быть много вещей.Я предполагаю, что у вас достаточно свободного дискового пространства для обработки процесса.Как уже упоминали другие, могут быть некоторые проблемы, исправленные путем редактирования файла php.ini или использования функции ini_set () в самом коде.

Сколько памяти имеет ваша машина?Если он исчерпывает вашу фактическую память, то имеет смысл, что он будет регулярно прерываться после определенного размера.Поэтому проверьте использование свободной памяти перед сценарием и следите за его выполнением.

Третий вариант может основываться на самой файловой системе.У меня нет большого опыта работы с CentOS, но некоторые файловые системы не допускают файлы размером более 2 ГБ.Хотя со страницы продукта кажется, что большинство систем в CentOS могут с этим справиться.

Четвертый вариант, который представляется наиболее перспективным, появляется, если вы посмотрите на страницу продуктавыше, другой возможный виновник - «Максимальное виртуальное адресное пространство для каждого процесса x86», которое составляет приблизительно 3 ГБ.x86_64 составляет около 2 ТБ, поэтому проверьте тип процессора.

Опять же, похоже, четвертый вариант является виновником.

0 голосов
/ 28 февраля 2014

Когда размер вашего файла большой, потребуется время, чтобы сделать его архив ZIP, но в PHP (php.ini) максимальное время выполнения, поэтому вы должны попытаться увеличить это значение.

0 голосов
/ 29 января 2014

Используете ли вы переменные set_limit в php.

Вы можете использовать. Htacess или внутри скрипта PHP. Внутри скрипта set_time_limit (0); Внутри .htaccess php_value memory_limit 214572800;

0 голосов
/ 21 апреля 2011

в php.ini есть настройка максимального времени выполнения
возможно это увольняют!
попробуйте увеличить значение!

Существует также другое ограничение размера файла для ОС, попробуйте это тоже проверить!

...