Nicolase 2020-05-01
通过点击一个按钮批量下载远程pdf文件
1.获取远程文件内容,写入临时目录和文件
2.将临时目录打包
3.下载打包文件
4.下载后删除临时文件
//文件地址 $file_path = [ ‘http://localhost:8888/1.pdf‘, ‘http://localhost:8888/2.pdf‘, ‘http://localhost:8888/3.pdf‘, ‘http://localhost:8888/4.pdf‘, ]; //利用ZipArchive实现打包 $zip = new \ZipArchive(); $zip_path = ‘./temp/‘; $zip_name = ‘temp.zip‘; $zip_file = $zip_path . $zip_name; if ($zip->open($zip_file, \ZipArchive::CREATE)) { foreach($file_path as $v) { //获取文件内容 $file_content = file_get_contents($v); //写入临时文件(没有temp目录的需要先手动创建或用mkdir创建) $temp_file_path = $zip_path . ‘temp_‘ . time() . rand(1000, 9999) . ‘.pdf‘; //创建临时目录 if (!is_dir($zip_path)) { if ((mkdir($zip_path, 0777, true)) === false) { return ‘临时目录创建失败!‘; } } //写入文件 $temp_file = file_put_contents($temp_file_path, $file_content); if (!$temp_file) { continue; } //文件写入zip中 $zip->addFile($temp_file_path); } //关闭 $zip->close(); } //设置下载zip的头信息 header(‘Content-Type: application/zip‘); //zip压缩文件 header("Content-Transfer-Encoding: Binary"); //二进制传输 header("Content-Type:application/force-download"); //强制下载 header("Content-Disposition: attachment; filename=" . $zip_name); //告诉浏览器下载并设置文件名 readfile($zip_file); //下载后删除临时目录(delete_dir方法见下方) if (is_dir($zip_path)) delete_dir($zip_path);
/** * 删除目录 */ if (!function_exists(‘delete_dir‘)) { function delete_dir($path) { if (!is_dir($path)) { return false; } $dirs = scandir($path); foreach ($dirs as $dir) { if ($dir == ‘.‘ || $dir == ‘..‘) { continue; } if (is_dir($path . $dir)) { delete_dir($path . $dir); } else { @unlink($path . $dir); } } @rmdir($path); } }