Intereting Posts
разбиение на страницы ошибок в кодеригенере Невозможно установить заголовок SOAP с mustUnderstand Как подсчитать количество индексированных страниц Google через PHP Представленные пользователем сообщения с использованием Laravel PHP array_multisort – как сохранить значения ключа? Обновить только первую запись из повторяющихся записей в MySQL HTML / PHP – значение ввода по умолчанию Добавьте 30 секунд к времени с помощью PHP Создать выпадающий список из значения в базе данных php Функция MySQL password () для PHP Может ли недавно выпущенная среда выполнения GAE PHP получить доступ к встроенному хранилищу данных GAE? Простой безопасный способ для базы данных Flash для MySQL Управление «виртуальным веб-браузером» на любом языке Как направить уведомление от клиента отдыха для целей тестирования Как загрузить файл с его оригинальным именем вместо уникального имени?

PHP Прерывание при создании большого .zip-файла

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

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

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

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

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

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

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

Благодаря!

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

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

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

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

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

У вас есть переменные set_limit в php.

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

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

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

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