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

php – 批量压缩(Zip)文件

发布时间:2020-12-13 13:05:05 所属栏目:PHP教程 来源:网络整理
导读:使用: 我们的用户在AWS S3帐户中有许多对象.我们正在添加一个功能,可以立即下载整个项目.我们更关注效率而不是存储. 在查看了不同的选项(ZipArchive,PclZip)之后,我遇到了this guide,推荐使用Chilkat. 它的方法很有意义,总结如下: 在上传时预先压缩每个文
使用:
我们的用户在AWS S3帐户中有许多对象.我们正在添加一个功能,可以立即下载整个项目.我们更关注效率而不是存储.

在查看了不同的选项(ZipArchive,PclZip)之后,我遇到了this guide,推荐使用Chilkat.

它的方法很有意义,总结如下:

>在上传时预先压缩每个文件并将其存储在S3中
>“项目下载”开始下载每个压缩文件,然后QuickAppend(Chilkat术语),然后“立即”(每个文件200ms)将它们添加到整个压缩文件
>将新的Zip文件上传到S3,提供链接

我遇到的问题是Chilkat的许可证是249美元,我正在寻找免费的替代品.

An alternative(也是免费的)使用了类似的概念:

>在上传时预先压缩每个文件并将其存储在S3中
>“项目下载”开始下载每个压缩文件,然后将它们放在一起
>将新的Zip文件上传到S3,提供链接

有没有“标准”或“理想”的方式来处理这个?

在我的本地系统上,PHP的内置zip库能够在大约800ms内将10个24MB的压缩文件合并到21个51MB的zip文件中,这与您报告的200ms /文件相当,但我不确定您的文件有多大或者你正在使用什么类型的硬件.

与指南的作者最初使用的Java库不同,PHP的zip库是用C实现的,因此您不会看到作者看到的相同的Java到C性能增益.话虽如此,我不知道Chillkat的QuickAppend是如何工作的,或者它与PHP的zip库相比如何,但是对于预先压缩的文件,无论你使用PHP还是Chillkat,它似乎都是最快的解决方案.

$destination = new ZipArchive;
$source = new ZipArchive;

if($source->open('a.zip') === TRUE 
&& $destination->open('b.zip') === TRUE) {

    $time_start = microtime(true);

    $temp_dir = "/tmp/zip_" . time();        
    mkdir($temp_dir,0777,true);
    $source->extractTo($temp_dir);
    $source->close();

    $files = scandir($temp_dir);
    $file_count = 0;

    foreach($files as $file) {
        if($file == '.' || $file == '..')
          continue;

        $destination->addFile("$temp_dir/$file");
        ++$file_count;
    }

    $destination->close();
    exec("rm -rf $temp_dir &");

    $time_end = microtime(true);
    $time = $time_end - $time_start;

    print "Added $file_count files in " . ($time * 1000). "ms n";    
}

产量

-rw-rw-r-- 1 fuzzytree fuzzytree 24020997 Jun  4 15:57 a.zip
-rw-rw-r-- 1 fuzzytree fuzzytree 51418980 Jun  4 15:57 b.zip

fuzzytree@atlas:~/testzip$php zip.php 
Added 10 files in 872.43795394897ms

fuzzytree@atlas:~/testzip$ls -ltr *zip
-rw-rw-r-- 1 fuzzytree fuzzytree 24020997 Jun  4 15:57 a.zip
-rw-rw-r-- 1 fuzzytree fuzzytree 75443030 Jun  4 15:57 b.zip

(编辑:李大同)

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

    推荐文章
      热点阅读