찾다
php教程php手册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);
	}
方法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文件再提供下载呢


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

DVWA

DVWA

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

안전한 시험 브라우저

안전한 시험 브라우저

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