使用PHP PCL Zip在许多调用中压缩单个大文件
发布时间:2020-12-13 17:24:18 所属栏目:PHP教程 来源:网络整理
导读:100 MB文件 – 10个ZIP通话(每通话10个邮箱) – 1个ZIP文件 我应该发起10次调用,将一个100 MB的文件添加到Zip文件中(比如每次调用10 MB Zipping). 问题是我们有一个具有内存和时间限制的系统(对于一个呼叫,它不会处理超过10到15MB的内存). 因此,通过多次调用
100 MB文件 – > 10个ZIP通话(每通话10个邮箱) – > 1个ZIP文件
我应该发起10次调用,将一个100 MB的文件添加到Zip文件中(比如每次调用10 MB Zipping). 问题是我们有一个具有内存和时间限制的系统(对于一个呼叫,它不会处理超过10到15MB的内存). 因此,通过多次调用来压缩大文件是基本的想法. 如果需要,我准备提供更多数据. 解决方法
你以前试过PECL Zip吗?
只需使用以下代码压缩两个文件,没有任何内存限制问题.时间限制可能会重置.我的环境:memory_limit为3MB,max_execution时间为20秒. <?php 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问题. 这是一个例子: 用法: 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并在文件完成后提供服务,而不是等到进程结束. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |