首先需要开启ZipArchive拓展(php.ini)
确认拓展已开启,没有找到的可以下载放到php下的ext目录
链接:https://pan.baidu.com/s/16BNkqa7IV1BfyUbYXa1wXw
提取码:jmmn
phpinfo()确认拓展开启后,即可使用
PHP代码如下:
// 批量下载二维码
public function uploadEwm(){
// 小数组(前端表格多选传过来)
$codes = "P202105260929478396,P202105260817563449,P202105250850237432,P202105170956254203,P202105161028448863";
// 根据逗号分割,将字符串转成数组
$code_array = explode(',', $codes);
// 查询数量
$count = count($code_array);
if ($count > 0) {
// 先批量生成二维码(这块做的功能是如果没有二维码就先批量生成,然后再打包进行下载)
$this->createQrCode($code_array, $type);
// 循环拼接数据
foreach ($code_array as $key => $value) {
$files[] = './vendor/phpqrcode/img/'.$value.'.png';
}
// 引用PHP->ZipArchive类
$zip = new \ZipArchive;
// 定义压缩包文件名
$zipName = 'code.zip';
// 没有文件则创建
if ($zip->open($zipName, \ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE)!==TRUE) {
exit('无法打开文件,或者文件创建失败');
}
// 循环给zip压缩包写入文件
foreach($files as $val){
if(file_exists($val)){
/*
addFile函数首个参数如果带有路径,则压缩的文件里包含的是带有路径的文件压缩
若不希望带有路径,则需要该函数的第二个参数
*/
$zip->addFile($val, basename($val)); // 第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下
}else{
exit('网络原因,无法下载二维码文件');
}
}
// 关闭
$zip->close();
// 下面是输出下载;
header("Cache-Control: max-age=0");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=' .date('Y-m-d').$zipName); // 文件名
header("Content-Type: application/zip"); // zip格式的
header("Content-Transfer-Encoding: binary"); // 告诉浏览器,这是二进制文件
header('Content-Length: ' . filesize($zipName)); // 告诉浏览器,文件大小
@readfile($zipName);//输出文件;
// 删除服务器文件资源
unlink($zipName);
exit;
} else {
$this->error('请搜索需要下载的数据');
}
}
// 二维码加汉字
public function getQRcode($url, $code, $content){
// 调用phpqrcode
Vendor('phpqrcode.phpqrcode');
$qrcode = new \QRcode();
// 拼接二维码图片地址
$shareimg = 'fail'.$code . '.png';
$shareimg = './vendor/phpqrcode/img/'. $shareimg;
// 首先生成一张不带文字的二维码图片
/*
参数1:二维码里的内容
参数2:生成二维码的保存地址
参数3:二维码可被覆盖的百分比,可以控制二维码的容错率(L->7%, M->15%, Q->25%, H->30%)
参数4:生成二维码图片的大小
参数5:控制生成二维码图片的空白区域大小
*/
$qrcode->png($code, $shareimg, 'M', 12, 13);
// 先读取存好的二维码图片,再追加文字
$image = imagecreatefrompng($shareimg);
// 字体文件
$font = './vendor/phpqrcode/font/simsun.ttc';
// 文字颜色
$color = imagecolorallocate($image,0,0,0);
// 创建二维码图片下文字
foreach ($content as $key => $value) {
if($key==0){
/*
参数1:读取现有的二维码图片
参数2:字体大小
参数3:字体倾斜的角度
参数4,5:文字的x,y轴坐标
参数6:文字的颜色
参数7:字体的样式(引入的字体文件)
参数8:二维码下方的文字内容
*/
imagettftext($image, 15, 0, 150, 430, $color, $font, $value); // 创建文字(编码)
}else{
// 这里每行加24,设置的是文字的行距
imagettftext($image, 15, 0, 150, $key*24+430, $color, $font, $value); // 创建文字(循环内容)
}
}
// 保存新生成的二维码图片
imagepng($image, $url);
// 删除不带文字的二维码图片
unlink($shareimg);
}
传送门
转载:https://blog.csdn.net/xuander666/article/details/117280493
查看评论