PHP生成压缩文件开发实例
程序员文章站
2022-04-13 09:32:44
...
大概需求: 每一个订单都有多个文件附件,在下载的时候希望对当前订单的文件自动打包成一个压缩包下载 细节需求:当前订单号_年月日+时间.zip 例如: 1.生成压缩文件,压缩文件名格式: 2.压缩文件存放在根目录 /upload/zipfile/年月/自定义的压缩文件名.zip
大概需求:
每一个订单都有多个文件附件,在下载的时候希望对当前订单的文件自动打包成一个压缩包下载
细节需求:当前订单号_年月日+时间.zip 例如:
1.生成压缩文件,压缩文件名格式:
2.压缩文件存放在根目录 /upload/zipfile/年月/自定义的压缩文件名.zip
3.点击下载压缩包,系统开始对压缩文件打包,打包完成后自动开始下载
4.为了防止暴露压缩包文件路径,需要对下载的压缩包文件名改名
具体操作模式请见下面的代码:
文件路径:
压缩包文件存放路径:/upload/zipfile/
上传的附件存放路径:/upload/file/
1.基本配置文件文件 config.inc.php放在系统根目录
define('SYS_ROOT', str_replace("\\", '/', dirname(__FILE__))); define('SYS_UPLOAD', SYS_ROOT.'/upload/file'); define('SYS_DOWNLOAD', SYS_ROOT.'/upload/zipfile'); define('SYS_WIN', strpos(strtoupper(PHP_OS), 'WIN') !== false ? true: false); define('SYS_CHMOD', ('0777' && !SYS_WIN) ? '0777' : 0);
2.压缩包程序代码文件 getzip.php
header("Content-type: text/html; charset=utf-8"); require_once '../config.inc.php'; //载入配置路径配置文件 $arrfiles = array(SYS_UPLOAD . '/1.jpg', SYS_UPLOAD . '/x.jpg',); //这里是附件的文件数组 $orderNum = '888'; //订单号 $downFileName = 'tieniu.zip'; //下载的文件名 如果为空那么就是系统自定义名称 如果指定就显示指定名字 $zipUrl = create_zip($arrfiles, $orderNum); //生成的压缩文件名词 file_down($zipUrl, $downFileName); //提供http下载,并可以进行重命名下载文件,建议重命名,防止路径猜解 /* * 生成压缩包文件名 * @param [String] $orderNum 订单号 * @return [String] 返回带有绝对路径的订单号的压缩文件名 */ function get_zipname($orderNum) { $zipName = SYS_DOWNLOAD . '/' . date('Ym') . '/' . $orderNum . '_' . date("Ymd_Hi") . '.zip'; return $zipName; } /* * 按照特定需求打包压缩包的目录结构设置 */ function pack_object() { } /* * 生成压缩包 * @param [Array] $arrfiles 带有绝对路径的文件数组 * @param [String] $orderNum 订单号 * @return [String] 返回带有绝对路径的订单号的压缩文件名 如如果失败返回 FALSE */ function create_zip($arrfiles, $orderNum) { $zipName = get_zipname($orderNum); //获得文件名 dir_create(dirname($zipName)); //建立生成压缩文件的目录 $zip = new ZipArchive(); if ($zip->open($zipName, ZIPARCHIVE::CREATE) !== TRUE) { return FALSE; } foreach ($arrfiles as $path) { if (is_file($path)) {//判断文件是否存在 $zip->addFile($path, basename($path)); //把文件加入到压缩包中 } } $zip->close(); return $zipName; } /* * 处理文件目录 * @param [Array] $arrfiles 带有绝对路径的文件数组 * @param [String] $dirpath 文件路径 * @return [String] 返回处理的文件路径,方便生成文件目录 */ function dir_path($dirpath) { $dirpath = str_replace('\\', '/', $dirpath); if (substr($dirpath, -1) != '/') $dirpath = $dirpath . '/'; return $dirpath; } /* * 生成文件目录 * @param [String] $path 文件路径 * @return [String] 返回生成的文件目录结构 */ function dir_create($path) { if (is_dir($path)) return true; $dir = str_replace(SYS_DOWNLOAD . '/', '', $path); $dir = dir_path($dir); $temp = explode('/', $dir); $cur_dir = SYS_DOWNLOAD . '/'; $max = count($temp) - 1; for ($i = 0; $i $max
下一篇: php实现在线解压zip压缩文件