轻量级前端框架在提升开发效率与用户体验中的重要作用
1746
2022-10-13
PHP使用ZipArchive类压缩文件成ZIP并-,兼容Winows和Linux
ZipArchive类—— 一种Zip压缩文档ZipArchive::addEmptyDir —— Add a new directory 添加一个新目录ZipArchive::addFile —— Adds a file to a ZIP archive from the given path 从给定的路径获得文件添加到ZIP文件中bool ZipArchive::addFile(string $filename[,string $localname = NULL]) —— If supplied, this is the local name inside the ZIP archive that will override thefilename. 如果设置,这是在ZIP文件内部重写$filename的文件名(可用"/"的方式添加目录)ZipArchive::open open a ZIP file archive —— 打开一个ZIP文件mixed ZipArchive::open(string $filename[,int $flags]) open a new zip archive for reading,writing or midifying 打开一个用于新的,用于读、写、修改的ZIP文件$flags 1.ZipArchive::CREATE 如果不存在则创建个zip压缩包 2.ZipArchive::OVERWRITE 总是以一个新的压缩包开始,此模式下如果存在则会被覆盖ZipArchive::close Close the active archive(opened or newly created) 关闭一个ZIP文件(已打开或新建) /** * @desc 获得文件列表 * @param string $dir 目录 * @return array */ function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir($dir); foreach ($file_dir as $file) { if ($file == '.' || $file == '..'){ continue; } elseif (is_dir($dir.$file)) { $result = array_merge($result, $this->list_dir($dir.$file.'/')); } else{ array_push($result, $dir.$file); } } } return $result; } /** * @desc 将文件夹打包成zip * @param string $path 文件路径 * @param object $zip 压缩类对象 * @param array $list_dir 文件路径列表 * @param string $preg 正则提取指定目录 */ function addFileToZip($path, $zip, $list_dir, $preg ) { $handle = opendir($path); $i = 0; while ($filename = readdir($handle)) { if ($filename != '.' && $filename != '..') { $newPath = $path . '/' . $filename; if (is_dir($newPath)) { $this->addFileToZip($newPath, $zip, $list_dir, $preg); } else { if ($rs = preg_match('/' . $preg . '/', $newPath)) { $zip->addFile($newPath, $list_dir[$i]); } $i++; } } } @closedir($handle); } /** * @desc -zip * @param string $filename 文件名 */ function downloadZip($filename) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename='.$filename); //文件名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小 @readfile($filename); } //执行压缩并-ZIP文件 $file_url = APP_RESOURCE_ROOT . 'brancList' . DS . $branch_id . DS;//APP_RESOURCE_ROOT自定义项目根路径常量 DS自定义兼容Linux路径分隔符常量 Linux需要修改目录权限777 $dataList = $this->list_dir($file_url); $new_file = str_replace(APP_RESOURCE_ROOT . 'brancList' . DS, '', $dataList); $name = "压缩文件.zip"; //最终生成的文件名(含路径) $zip = new ZipArchive(); $filename = iconv('utf-8', 'gbk', $name); if ($zip->open($filename, ZipArchive::OVERWRITE)=== TRUE){ $this->addFileToZip($file_url, $zip, $new_file, $preg); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 $zip->close(); //关闭处理的zip文件 } if (!file_exists($filename)) { touch($filename); } $this->downloadZip($filename); exit;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~