我刚好有个系统的业务逻辑和你的一样
我把关键代码给你
public function downloadall($ids)
{
$snno = $this->model->where('id', $ids)->value('snno');
$path = '/www/wwwroot/yourprojectname/public/qrcode/' . $snno;
$zip = new \ZipArchive();
$end_dir = $snno . date('YmdHis', time()) . '.zip';//定义打包后的包名
if ($zip->open($end_dir, \ZipArchive::CREATE) === TRUE) {
$this->addFileToZip($path, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
}
$file = '/www/wwwroot/yourprojectname/public/' . $end_dir;
$fileTmp = pathinfo($file);
$fileExt = $fileTmp['extension'];
$fp = fopen($file, "r");
$saveFileName = $end_dir;
$file_size = filesize($file);
//下载文件需要用到的头
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:" . $file_size);
Header("Content-Disposition: attachment; filename=" . $saveFileName);
$buffer = 1024;
$file_count = 0;
//向浏览器返回数据
while (!feof($fp) && $file_count < $file_size) {
$file_con = fread($fp, $buffer);
$file_count += $buffer;
echo $file_con;
}
fclose($fp);
exit;
}
private function addFileToZip($path, $zip)
{
$handler = opendir($path); //打开当前文件夹由$path指定。
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..',不要对他们进行操作
$zip->addFile($path . "/" . $filename);
}
}
@closedir($path);
}
执行downloadall方法 即可先压缩对应目录所有文件 然后自动下载
发表评论 取消回复