Heim php教程 php手册 php 压缩与解压缩文件 :ZipArchive

php 压缩与解压缩文件 :ZipArchive

Jun 06, 2016 pm 07:50 PM
php ziparchive 使用 压缩 Start 文件

一开始使用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);
	}
Nach dem Login kopieren
方法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();
		}
		
	}
Nach dem Login kopieren

直接使用addFile就可以简单的把所有指定文件改为指定的名称并打包到zip

现在存在一个问题,如果使用zipArchive压缩文件,怎么能确定它已经把所有文件都压缩好了呢?如果刚开始执行压缩就点击下载zip包,这样zip包里的文件是不完整的,怎么才能提供让zipArchive生成完整的zip文件再提供下载呢


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

See all articles