小言_互联网的博客

PHP ZipArchive拓展实现多文件打包下载

309人阅读  评论(0)

首先需要开启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);
    }

传送门

PHP生成二维码并添加文字(phpqrcode类)


转载:https://blog.csdn.net/xuander666/article/details/117280493
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场