一开始使用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); }方法moveZipFiles是递归的把解压文件夹里面的文件都移动到最外层的目录下,unZip实现了解压,移动,并删除压缩包的功能,其两个参数是压缩包路径和解压路径,一个是文件,一个为目录
而压缩文件,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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

드림위버 CS6
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
