加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用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问题. 这是一个例子:
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并在文件完成后提供服务,而不是等到进程结束.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读