TP5 ZipArchive 的坑

本文揭示了ZipArchive在PHP中的使用陷阱,重点讲解了CREATE模式的问题、OVERWRITE模式的适用场景,并强调了同时使用OVERWRITE和CREATE的重要性。还分享了添加文件时确保绝对路径的注意事项,帮助开发者避免常见压缩错误。
摘要由CSDN通过智能技术生成
  1. 坑一:不要单独用ZipArchive::CREATE模式,因为ZipArchive::CREATE模式会往aaa.zip中追加内容(测试过会将原文件所在的目录都拉进来压缩); ZipArchive::OVERWRITE的模式是 ,当目标文件已经存在时,程序会生成一个新的同名文件覆盖原来的文件,但是,当这个文件不存在时,ZipArchive::open()将返回数字9;结论:同时使用ZipArchive::OVERWRITE和ZipArchive::CREATE;
  2. 坑二:addFile的第一个参数一定要是绝对路径(保证能通过该路径找到相应的文件); 第二个参数就是你保存到压缩文件的 文件名称;
	$paths = ['aaa.pdf','aaa.jpg];
	$zipname = 'aaa.zip';
    $zip = new \ZipArchive();  //引用 类
    //$zip->open($zipname,\ZipArchive::OVERWRITE);  //如果文件存在,则用这个模式就够了,如果需要创建文件  则要结合用2个一起;
    $res = $zip->open($zipname, \ZipArchive::OVERWRITE|\ZipArchive::CREATE); //坑一
    if ($res === TRUE) {
        foreach ($paths as $val) {
        	$file_info_arr= pathinfo($val);
            $filename =$file_info_arr['basename'];
            
            $zip->addFile($val, $filename); //坑二  添加文件
        }
        $zip->close();
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: Binary");
        header("Content-Length: " . filesize($zipname));
        header("Content-Disposition: attachment; filename=\"" . basename($zipname) . "\"");

        readfile($zipname);
        exit;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值