/*导出图片*/
public function exportimg(){
$img_array = [
['id'=>1,'cover_img'=>'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'],
['id'=>2,'cover_img'=>'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'],
['id'=>3,'cover_img'=>'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'],
['id'=>4,'cover_img'=>'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'],
];
$arr = [];
$local = './dow_img/';//图片下载本地路径
foreach($img_array as $kk=>$vv){
/*将远程图片下载到本地*/
$file_name = $vv['id'].'.jpg';//图片名称
$this->httpTolocal($vv['cover_img'],$local,$file_name);
$src = $local.$file_name;
$arr[] = ['name'=>$file_name,'src'=>$src,'id'=>$vv['id']];
}
$name = 'zip名称';//zip名称
$dir = './zip/';//zip所在目录
/*判断是否存在目录*/
if(!file_exists($dir)){
mkdir($dir,777);
}
$zip = new \ZipArchive();
$file_name = $dir.$name.'.zip';
$res = $zip->open($file_name,\ZipArchive::CREATE);//创建zip
if($res){
foreach($arr as $a){
$zip_dir = 'dow_img/'.$a['id'].'_img/';//压缩到指定文件夹路径
$zip->addFile($a['src'], $zip_dir.$a['name']);
}
$zip->close();
//清空(擦除)缓冲区并关闭输出缓冲
ob_end_clean();
//下载建好的.zip压缩包
header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求
header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With');
header("Content-Type: application/force-download");//告诉浏览器强制下载
header("Content-Transfer-Encoding: binary");//声明一个下载的文件
header('Content-Type: application/zip');//设置文件内容类型为zip
header('Content-Disposition: attachment; filename='.$name.'.zip');//声明文件名
header('Content-Length: '.filesize($file_name));//声明文件大小
error_reporting(0);
//将欲下载的zip文件写入到输出缓冲
readfile($file_name);
//将缓冲区的内容立即发送到浏览器,输出
flush();
unlink($file_name);//导出zip 后,原先的文件夹清空(视情况而操作)
foreach($arr as $d){
unlink($d['src']);//删除下载下来的本地图片
}
exit;
}else{
$zip->close();
$this->error('无法创建zip');
}
}
/**
* 下载网络图片到本地
*
* @param $url 网络地址
* @param $local 本地路径 ./dowimg/
* @param $file_name 图片名称.jpg
* */
public function httpTolocal($url='https://www.baidu.com/img/bd_logo1.png',$local='./',$file_name=''){
if(empty($file_name)){
$file_name = rand(1000,9999).'.jpg';
}
$state = @file_get_contents($url,0,null,0,1);//获取网络资源的字符内容
if($state){
$filename = $local.$file_name;//文件名称与路径
if(!file_exists($local)){
mkdir($local,777);
}
ob_start();//打开输出
readfile($url);//输出图片文件
$img = ob_get_contents();//得到浏览器输出
ob_end_clean();//清除输出并关闭
$size = strlen($img);//得到图片大小
$fp2 = @fopen($filename, "a");
fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
fclose($fp2);
return 1;
} else{
return 0;
}
}
php thinkphp zip 图片 批量 下载 导出
于 2019-06-27 10:58:09 首次发布