php 压缩与解压缩文件 :ZipArchive
一开始使用php调用命令行来执行压缩,后来发现php有ZipArchive类库实现了文件的压缩与解压缩 //递归移动文件到当前目录public function moveZipFiles($path,$aimpath) //把path里的所有文件夹里的文件都移动到path层{//rename(/tmp/tmp_file.txt, /home/user
一开始使用php调用命令行来执行压缩,后来发现php有ZipArchive类库实现了文件的压缩与解压缩
//递归移动文件到当前目录 public function moveZipFiles($path,$aimpath) //把path里的所有文件夹里的文件都移动到path层 { //rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt"); $handler = opendir($path); while (($filename = readdir($handler)) !== false) { if($filename != "." && $filename != "..") //务必使用!==,防止目录下出现类似文件名“0”等情况 { if(is_dir($path.'/'.$filename)) //如果是目录,递归移动 { $this->moveZipFiles($path.'/'.$filename,$aimpath); //yii的php递归需要加上$this } else //如果是文件,则移动到aimpath { rename($path.'/'.$filename, $aimpath.'/'.$filename); } } } closedir($handler); } //解压上传的bin文件的压缩包 public function unZip($zipPath,$path) { $f =new func(); $zip = new ZipArchive; if($zip->open($zipPath)===TRUE){ $zip->extractTo($path);//假设解压缩到在当前路径下images文件夹内 $zip->close();//关闭处理的zip文件 } //解压缩完毕删除压缩包 unlink($zipPath); $f->moveZipFiles($path,$path); }
而压缩文件,ZipArchive也提供了足够的简单的接口
public function generateTaskZip($prj_id , $ver_id , $task_id ) { $f = new func(); $zip = new ZipArchive; $task_dir = Yii::getPathOfAlias('webroot').'/projects/'.$prj_id .'/'.$ver_id .'/'.$task_id ; $root_dir = Yii::getPathOfAlias('webroot'); $generatefile_dir = Yii::getPathOfAlias('webroot').'/projects/'.$prj_id .'/'.$ver_id .'/base'; if($zip->open($task_dir.'/output.zip',ZipArchive::OVERWRITE)===TRUE){ $zip->addEmptyDir("CC_Log_GUI"); $zip->addFile($root_dir.'/UI.exe', 'Tools_GUI.exe'); $zip->addFile($root_dir.'/irst.reg', 'first.reg'); $zip->addFile($root_dir.'/API.dll', 'API.dll'); $zip->addFile($root_dir.'/n.dll', 'In.dll'); //把生成的jumpbyList.json打包到zip if(!is_dir($generatefile_dir)) { return; } $handler1 = opendir($generatefile_dir); while (($filename = readdir($handler1)) !== false) {//务必使用!==,防止目录下出现类似文件名“0”等情况 if($filename != "." && $filename != "..") { $len = strlen($filename); if(!substr_compare($filename,'st_',0,19,FALSE)) //把base的文件夹下所有的st_*.json文件都打包到zip包里 { $zip->addFile($generatefile_dir.'/'.$filename,basename($filename)); } } } closedir($handler1); //把flf文件打包到zip包 if(!is_dir($task_dir)) { return; } $handler2 = opendir($task_dir); while (($filename = readdir($handler2)) !== false) { if($filename != "." && $filename != "..") //务必使用!==,防止目录下出现类似文件名“0”等情况 { $len = strlen($filename); if(!substr_compare($filename,'.flf',$len-4,4,FALSE)) //如果是flf文件,则需要打包到两个地方,一个是当前目录,另外是CC_Log_GUI/目录 { $file_name = basename($filename); $zip->addFile($task_dir.'/'.$filename,'UI/'.$file_name); $zip->addFile($task_dir.'/'.$filename,$file_name); } } } closedir($handler2); $zip->close(); } }
直接使用addFile就可以简单的把所有指定文件改为指定的名称并打包到zip
现在存在一个问题,如果使用zipArchive压缩文件,怎么能确定它已经把所有文件都压缩好了呢?如果刚开始执行压缩就点击下载zip包,这样zip包里的文件是不完整的,怎么才能提供让zipArchive生成完整的zip文件再提供下载呢

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

登录 CakePHP 是一项非常简单的任务。您只需使用一项功能即可。您可以记录任何后台进程(如 cronjob)的错误、异常、用户活动、用户采取的操作。在 CakePHP 中记录数据很容易。提供了 log() 函数

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。
