Мой 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
возможно, это уволили!
попытайтесь увеличить ценность!
Существует также различный размер файла для ОС, попробуйте также проверить это!