PHP Zip压缩导出图片
1.需求,根据url导出图片
2.思路
准备好图片地址,想要保存的文件名称,在一个数组中
启动打开zip文件
下载文件添加到zip中
下载zip到本地
3.实现代码
1 <?php 2 // 开始时间 3 $stime=microtime(true); 4 // 数据 5 $data="'Test04255','Test04254','Test04253','Test04252','Test04251','Test04250'"; 6 //$data=file_get_contents(dirname(__FILE__).'/kuhao.txt'); 7 //连接数据库 8 $pdo = new PDO("mysql:host=127.0.0.1;dbname=dbname","root","root"); 9 $sql="SELECT `image`,`library_number`,`carousel_image`,`detail` FROM `art_info` WHERE `library_number` IN ({$data})"; 10 $cx=$pdo ->query($sql,$pdo::FETCH_ASSOC); 11 $list=$cx->fetchAll($pdo::FETCH_ASSOC); 12 //文件路径 13 $tmpDir = $_SERVER['DOCUMENT_ROOT'].'\\'.'downimg\\'; 14 if (!file_exists($tmpDir)) { 15 //创建文件夹 16 mkdir($tmpDir, 0777, true); 17 } 18 // 定义文件信息 19 $zipName='tupian.zip'; 20 // 实例化zip类 21 $zip = new \ZipArchive(); 22 $zipNameUrl = $tmpDir . $zipName; 23 if ($zip->open($zipNameUrl, \ZipArchive::OVERWRITE) !== true) { 24 //OVERWRITE 参数会覆写压缩包的文件 文件必须已经存在 25 if ($zip->open($zipNameUrl, \ZipArchive::CREATE) !== true) { 26 // 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip 27 return '下载失败,文件夹不存在'; 28 } 29 } 30 // 循环保存图片信息 31 foreach ($list as $lis){ 32 // 第一个默认的图 33 $picAllArr[] = ['fileurl'=>$lis['image'],'filename'=>$tmpDir.$lis['library_number'].'\image.'.pathinfo($lis['image'])['extension'],'dirname'=>$lis['library_number']]; 34 $zip->addEmptyDir($lis['library_number']); 35 // 多图 36 $lis['carousel_image_arr'] = array_filter(explode(',', $lis['carousel_image'])); 37 foreach ($lis['carousel_image_arr'] as $key => $imagear){ 38 $ext = pathinfo($imagear)['extension']; 39 $picAllArr[] = ['fileurl'=>$imagear,'filename'=>$tmpDir.$lis['library_number'].'\carousel_image'.++$key.'.'.$ext,'dirname'=>$lis['library_number']]; 40 } 41 // 详情图 42 $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/"; 43 preg_match_all($pattern,$lis['detail'],$match); 44 foreach ($match[1] as $key => $v){ 45 $ext = pathinfo($v)['extension']; 46 $picAllArr[] = ['fileurl'=>$v,'filename'=>$tmpDir.$lis['library_number'].'\detail'.++$key.'.'.$ext,'dirname'=>$lis['library_number']]; 47 } 48 } 49 // 开始时间 50 $yasuotusttime=microtime(true); 51 foreach ($picAllArr as $file) { 52 //判断图片是否存在 53 $isFile = checkFileExists($file['fileurl']); 54 if (!$isFile) { 55 continue; 56 } 57 //抓取图片内容 58 $fileContent = file_get_contents($file['fileurl']); 59 //添加图片到zip中 60 $zip->addFromString($file['dirname'].'\\'.basename($file['filename']), $fileContent); 61 } 62 // 结束时间 63 $yasuotuendtime=microtime(true); 64 $zip->close(); 65 66 $etime=microtime(true); 67 68 $xiazaitime=$yasuotuendtime-$yasuotusttime; 69 $toime=$etime-$stime; 70 echo "当前页面执行时间为:{$toime}秒,下载时间{$xiazaitime}秒"; 71 exit; 72 // 判断文件是哪里的,是否存在 73 function checkFileExists($file){ 74 // 远程文件 75 if (strtolower(substr($file, 0, 5)) == 'https') { 76 // 远程文件 77 $header = get_headers($file, true); 78 return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304')); 79 80 } elseif (strtolower(substr($file, 0, 4)) == 'http') { 81 // 远程文件 82 $header = get_headers($file, true); 83 return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304')); 84 } else { 85 // 本地文件 86 return file_exists($file); 87 } 88 } 89 ?>
参考博客
https://www.cnblogs.com/chenhaoyu/p/11851580.html
一个96年的PHPER