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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。
