100 MB文件 – > 10个ZIP通话(每通话10个邮箱) – > 1个ZIP文件
我应该发起10次调用,将一个100 MB的文件添加到Zip文件中(比如每次调用10 MB Zipping).
问题是我们有一个具有内存和时间限制的系统(对于一个呼叫,它不会处理超过10到15MB的内存).
因此,通过多次调用来压缩大文件是基本的想法.
如果需要,我准备提供更多数据.
解决方法:
你以前试过PECL Zip吗?
只需使用以下代码压缩两个文件,没有任何内存限制问题.时间限制可能会重置.我的环境:memory_limit为3MB,max_execution时间为20秒.
set_time_limit(0);
$zip = new ZipArchive();
$zip->open('./test.zip', ZipArchive::CREATE);
$zip->addFile('./testa'); // 1.3 GB
$zip->addFile('./testb'); // 700mb
$zip->close();
注意:set_time_limit()不适用于php< 5.4使用save_mode = on
另一种方法可能是在后台进程中创建zip.这可以避免可能的memory_limit问题.
这是一个例子:
http://pastebin.com/7jBaPedb
用法:
try {
$t = new zip('/bin', '/tmp/test.zip');
$t->zip();
if ($t->waitForFinish(100))
echo "Succes :)";
else
echo $t->getOutput();
} catch ($e) {
echo $e->getMessage();
}
您可以在数据库中编写pid并在文件完成后提供服务,而不是等到进程结束.
标签:php,zip,pclzip
来源: https://codeday.me/bug/20190620/1243905.html