Я сталкиваюсь с ошибкой памяти в моем плагине WordPress.
Мой код:
function zipData($source, $destination) { if (extension_loaded('zip')) { if (file_exists($source)) { $zip = new ZipArchive(); if ($zip -> open($destination, ZipArchive::CREATE) === TRUE) { $source = realpath($source); if (is_dir($source)) { $iterator = new RecursiveDirectoryIterator($source); $iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS); $files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = realpath($file); if (is_dir($file)) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file)) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source)) { $zip->addFromString(basename($source), file_get_contents($source)); } } return $zip->close(); } } return false; } ini_set('max_execution_time', 600); ini_set('memory_limit','1024M'); zipData($upload_dir['basedir'], $upload_dir['basedir'].'/Jincowboy/JinBackupMedia'. time() .'.zip');
Я столкнулся с лимитом памяти, поэтому я проверил Google.
Я обнаружил, что генерация потока zip-файлов необходима для того, чтобы избежать ограничения памяти, но я не мог подтвердить это.
Я хочу, чтобы мой код обошел этот предел памяти и разрешил создание zip-файла на основе каталога с большими файлами.
Как я могу это исправить?
Вы можете попробовать https://github.com/Grandt/PHPZip, который поддерживает создание ZIP-файлов с потоковыми данными (что значительно снижает использование памяти).
И есть много сообщений о stackoverflow о том, как сжимать потоки с помощью pletora ответов.