thinkPHP自带的图片批量打包扩展ZipArchive

//导出压缩包
// $images 图片数组
public function Download($images)
{
    // 压缩包名称
    $filename = "./upload/" . date('Y-m-d') . "图片资源.zip";
    // 生成文件
    $zip = new \ZipArchive();
    // 使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
    if ($zip->open($filename, \ZipArchive::OVERWRITE) !== true) {
        //OVERWRITE 参数会覆写压缩包的文件 文件必须已经存在
        if ($zip->open($filename, \ZipArchive::CREATE) !== true) {
            // 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip
            exit('无法打开文件,或者文件创建失败');
        }
    }
    foreach ($images as $key => $v) {
        // 在压缩包里面创建的文件夹名称
        $file_son = date('Y-m-d');
        //在压缩包里面创建文件夹
        $zip->addEmptyDir($file_son);
        // 本地图片使用 addFile 方法 因为 $v['url'] 是需要本地路径
        $zip->addFile($v['url'], basename($v['name']));
        // 网络图片 需要使用 addFromString 方法 后面增加 file_get_contents 获取图片资源
        // 把图片移动到对应的文件夹里面 并且重新命名
        if ($v['url']) $zip->addFromString($file_son.'/'.($key+1).'.png', file_get_contents($v['url']));
    }
    // 关闭
    $zip->close();
    //下面是输出下载;
    header("Cache-Control: max-age=0");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename=' . basename($filename)); // 文件名
    header("Content-Type: application/zip"); // zip格式的
    header("Content-Transfer-Encoding: binary"); // 告诉浏览器,这是二进制文件
    header('Content-Length: ' . filesize($filename)); // 告诉浏览器,文件大小
    @readfile($filename);//输出文件;
    //删除服务器文件资源
    unlink($filename);
    exit;
}

如果你觉得这篇文章对你有所帮助,不妨点个赞呗,谢谢观看。

你可能感兴趣的:(PHP,php,zip,网络)