suchen
HeimBackend-EntwicklungPHP-Tutorialphp zip文件内容比较类,_PHP教程

php zip文件内容比较类,_PHP教程

Jul 13, 2016 am 10:18 AM
phpzip内容实现文件比较用法von

php zip文件内容比较类,

一个php实现的zip文件内容比较类及其用法,可实现比较两个zip文件的内容,返回新增、删除、及相同的文件列表。

php实现的zip文件内容比较类。是一个非常实用的PHP类文件。
该php zip文件比较类主要实现比较两个zip文件的内容,返回新增,删除,及相同的文件列表。暂时只支持单层。
需求:上传一个zip文件,zip内有很多图片文件。需要对图片文件进行一系列很耗时的处理。当用户再更新zip文件时。判断zip内文件是否一致,只处理不同的文件。这样可以节省资源与时间,因此需要编写一个能够比较zip内文件的类。
ZipCompare.class.php类文件如下:

<?<span>php 
</span><span>/*</span><span>* Zip Compare class 比较两个zip文件的内容,返回新增,删除,及相同的文件列表,暂时只支持单层 
* Date: 2014-05-18 
* Author: fdipzone 
* Ver: 1.0 
* www.jbxue.com
* Func: 
* public compare 比较zip文件内容 
* private getInfo 获取zip内文件列表 
* private parse 分析两个zip的文件内容 
* private check 检查zip文件是否正确 
* private check_handler 检查服务器是否有安装unzip 
</span><span>*/</span> 

<span>class</span> ZipCompare{ <span>//</span><span> class start </span>

<span>/*</span><span>* 比较zip文件内容,列出不相同的部分 
* @param String $zipfile1 zip文件1 
* @param String $zipfile2 zip文件2 
* @return Array 
</span><span>*/</span> 
<span>public</span> <span>function</span> compare(<span>$zipfile1</span>, <span>$zipfile2</span><span>){ 

</span><span>//</span><span> 检查是否有安装unzip </span>
<span>if</span>(!<span>$this</span>-><span>check_handler()){ 
</span><span>throw</span> <span>new</span> <span>Exception</span>('unzip not install'<span>); 
} 

</span><span>//</span><span> 检查zip文件 </span>
<span>if</span>(!<span>$this</span>->check(<span>$zipfile1</span>) || !<span>$this</span>->check(<span>$zipfile2</span><span>)){ 
</span><span>throw</span> <span>new</span> <span>Exception</span>('zipfile not exists or error'<span>); 
} 

</span><span>//</span><span> 获取zip内文件列表 </span>
<span>$zipinfo1</span> = <span>$this</span>->getInfo(<span>$zipfile1</span><span>); 
</span><span>$zipinfo2</span> = <span>$this</span>->getInfo(<span>$zipfile2</span><span>); 

</span><span>//</span><span> 分析两个zip的文件内容,返回相同及不同的文件列表 </span>
<span>return</span> <span>$this</span>->parse(<span>$zipinfo1</span>, <span>$zipinfo2</span><span>); 
} 

</span><span>/*</span><span>* 获取zip内文件列表 
* @param String $zipfile zip文件 
* @return Array zip内文件列表 
</span><span>*/</span> 
<span>private</span> <span>function</span> getInfo(<span>$zipfile</span><span>){ 

</span><span>//</span><span> unzip -v fields </span>
<span>$fields</span> = <span>array</span>('Length','Method','Size','Cmpr','Date','Time','CRC-32','Name'<span>); 

</span><span>//</span><span> zip verbose </span>
<span>$verbose</span> = <span>shell_exec</span>(<span>sprintf</span>("unzip -v %s | sed '\$d' | sed '\$d' | sed -n '4,\$p'", <span>$zipfile</span><span>)); 

</span><span>//</span><span> zip info </span>
<span>$zipinfo</span> = <span>array</span><span>(); 

</span><span>$filelist</span> = <span>explode</span>("\n", <span>$verbose</span><span>); 

</span><span>if</span>(<span>$filelist</span><span>){ 
</span><span>foreach</span>(<span>$filelist</span> <span>as</span> <span>$rowdata</span><span>){ 
</span><span>if</span>(<span>$rowdata</span>==''<span>){ 
</span><span>continue</span><span>; 
} 
</span><span>$rowdata</span> = <span>preg_replace</span>('/[ ]{2,}/', ' ', <span>$rowdata</span>); <span>//</span><span> 将两个或以上空格替换为一个 </span>
<span>$tmp</span> = <span>array_slice</span>(<span>explode</span>(' ', <span>$rowdata</span>), 1); <span>//</span><span> 去掉第一个空格 </span>

<span>$file</span> = <span>array_combine</span>(<span>$fields</span>, <span>$tmp</span><span>); 

</span><span>$zipinfo</span>[<span>$file</span>['Name']] = <span>$file</span>['Length'].'_'.<span>$file</span>['CRC-32']; <span>//</span><span> 文件名,长度,CRC32,用于校验 </span>
<span>} 
} 
</span><span>return</span> <span>$zipinfo</span><span>; 
} 

</span><span>/*</span><span>* 分析两个zip文件内容 
* @param String $zipinfo1 
* @param String $zipinfo2 
* @return Array 
</span><span>*/</span> 
<span>private</span> <span>function</span> parse(<span>$zipinfo1</span>, <span>$zipinfo2</span><span>){ 

</span><span>$result</span> = <span>array</span><span>( 
</span>'add' => <span>array</span>(), <span>//</span><span> 新增 </span>
'del' => <span>array</span>(), <span>//</span><span> 缺少 </span>
'match' => <span>array</span>() <span>//</span><span> 匹配 </span>
<span>); 

</span><span>if</span>(<span>$zipinfo1</span> && <span>$zipinfo2</span><span>){ 

</span><span>//</span><span> 在zip1但不在zip2的文件 </span>
<span>$result</span>['add'] = <span>array_values</span>(<span>array_diff</span>(<span>array_keys</span>(<span>$zipinfo1</span>), <span>array_keys</span>(<span>$zipinfo2</span><span>))); 

</span><span>//</span><span> 在zip2但不在zip1的文件 </span>
<span>$result</span>['del'] = <span>array_values</span>(<span>array_diff</span>(<span>array_keys</span>(<span>$zipinfo2</span>), <span>array_keys</span>(<span>$zipinfo1</span><span>))); 

</span><span>//</span><span> 同时在zip1与zip2的文件 </span>
<span>$match_file</span> = <span>array_values</span>(<span>array_diff</span>(<span>array_keys</span>(<span>$zipinfo1</span>), <span>$result</span>['add'<span>])); 

</span><span>//</span><span> 检查相同文件名的文件内容是否匹配 </span>
<span>for</span>(<span>$i</span>=0,<span>$len</span>=<span>count</span>(<span>$match_file</span>); <span>$i</span><<span>$len</span>; <span>$i</span>++<span>){ 

</span><span>if</span>(<span>$zipinfo1</span>[<span>$match_file</span>[<span>$i</span>]]==<span>$zipinfo2</span>[<span>$match_file</span>[<span>$i</span>]]){ <span>//</span><span> match </span>
<span>array_push</span>(<span>$result</span>['match'], <span>$match_file</span>[<span>$i</span><span>]); 
}</span><span>else</span>{ <span>//</span><span> not match, change to add </span>
<span>array_push</span>(<span>$result</span>['add'], <span>$match_file</span>[<span>$i</span><span>]); 
} 
} 
} 
</span><span>return</span> <span>$result</span><span>; 
} 

</span><span>/*</span><span>* 检查zip文件是否正确 
* @param String $zipfile zip文件 
* @return boolean 
</span><span>*/</span> 
<span>private</span> <span>function</span> check(<span>$zipfile</span><span>){ 
</span><span>//</span><span> 文件存在且能解压 </span>
<span>return</span> <span>file_exists</span>(<span>$zipfile</span>) && <span>shell_exec</span>(<span>sprintf</span>('unzip -v %s | wc -l', <span>$zipfile</span>))>1<span>; 
} 

</span><span>/*</span><span>* 检查服务器是否有安装unzip 
* @return boolean 
</span><span>*/</span> 
<span>private</span> <span>function</span><span> check_handler(){ 
</span><span>return</span> <span>strstr</span>(<span>shell_exec</span>('unzip -v'), 'version')!=''<span>; 
} 
} </span><span>//</span><span> class end </span>
?>

demo示例程序如下:

<?<span>php 
</span><span>require</span> "ZipCompare.class.php"<span>;

</span><span>$obj</span> = <span>new</span><span> ZipCompare(); 
</span><span>$result</span> = <span>$obj</span>->compare('test1.zip','test2.zip'<span>);

</span><span>print_r</span>(<span>$result</span><span>);

</span>?>

执行后输出:

Array
(
[add] => Array
(
[0] => 9.jpg
)

[del] => Array
(
[0] => 5.jpg
[1] => 6.jpg
[2] => 7.jpg
[3] => 8.jpg
)

[match] => Array
(
[0] => 1.jpg
[1] => 10.jpg
[2] => 11.jpg
[3] => 12.jpg
[4] => 13.jpg
[5] => 14.jpg
[6] => 15.jpg
[7] => 16.jpg
[8] => 17.jpg
[9] => 18.jpg
[10] => 2.jpg
[11] => 3.jpg
[12] => 4.jpg
)
)

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/884177.htmlTechArticlephp zip文件内容比较类, 一个php实现的zip文件内容比较类及其用法,可实现比较两个zip文件的内容,返回新增、删除、及相同的文件列表。 p...
Stellungnahme
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
Wie können Sie Sitzungsangriffe für Sitzungen verhindern?Wie können Sie Sitzungsangriffe für Sitzungen verhindern?Apr 28, 2025 am 12:25 AM

Zu den wirksamen Methoden zur Verhinderung fester Sitzungsangriffe gehören: 1. Regenerieren Sie die Sitzungs -ID, nachdem sich der Benutzer angemeldet hat; 2. Verwenden Sie einen sicheren Algorithmus für Sitzungs -ID -Generierung; 3.. Implementieren Sie den Timeout -Mechanismus für Sitzungen; 4. Verschlüsseln Sie Sitzungsdaten mithilfe von HTTPS. Diese Maßnahmen können sicherstellen, dass die Anwendung bei festgelegten Sitzungen unzerstörbar ist.

Wie implementieren Sie eine Sitzung ohne Sitzung und Authentifizierung?Wie implementieren Sie eine Sitzung ohne Sitzung und Authentifizierung?Apr 28, 2025 am 12:24 AM

Die implementierende Sitzungsfreie Authentifizierung kann durch die Verwendung von JSONWEBTOKENS (JWT), einem tokenbasierten Authentifizierungssystem, erreicht werden, bei dem alle erforderlichen Informationen im Token ohne serverseitige Sitzungsspeicher gespeichert werden. 1) Verwenden Sie JWT, um Token zu generieren und zu überprüfen, 2) Stellen Sie sicher, dass HTTPS verwendet wird, um zu verhindern, dass Token abgefangen werden.

Was sind einige häufige Sicherheitsrisiken mit PHP -Sitzungen verbunden?Was sind einige häufige Sicherheitsrisiken mit PHP -Sitzungen verbunden?Apr 28, 2025 am 12:24 AM

Zu den Sicherheitsrisiken von PHP -Sitzungen gehören hauptsächlich Sitzungshijacking, Sitzungsfixierung, Sitzungsvorhersage und Sitzungsvergiftung. 1. Session -Entführungen können durch Verwendung von HTTPS und Schutz von Cookies verhindert werden. 2. Die Sitzungsfixierung kann vermieden werden, indem die Sitzungs -ID regeneriert wird, bevor sich der Benutzer einmeldet. 4. Die Sitzungsvergiftung kann durch Überprüfung und Filterungsdaten verhindert werden.

Wie zerstören Sie eine PHP -Sitzung?Wie zerstören Sie eine PHP -Sitzung?Apr 28, 2025 am 12:16 AM

Um eine PHP -Sitzung zu zerstören, müssen Sie zuerst die Sitzung starten, dann die Daten löschen und die Sitzungsdatei zerstören. 1. Verwenden Sie Session_Start (), um die Sitzung zu starten. 2. Verwenden Sie Session_unset (), um die Sitzungsdaten zu löschen. 3. Verwenden Sie schließlich Session_destroy (), um die Sitzungsdatei zu zerstören, um die Datensicherheit und die Ressourcenfreigabe zu gewährleisten.

Wie können Sie den Standard -Save -Pfad in PHP ändern?Wie können Sie den Standard -Save -Pfad in PHP ändern?Apr 28, 2025 am 12:12 AM

Wie ändere ich den Standard -Sitzungsweg von PHP? Es kann durch die folgenden Schritte erreicht werden: Verwenden Sie Session_save_path ('/var/www/sessions'); Session_start (); in PHP -Skripten, um den Sitzungsspfad zu setzen. Setzen Sie in der Datei php.ini, um den Sitzungsspfad global zu ändern. Verwenden Sie Memcached oder Redis, um Sitzungsdaten wie ini_set ('Session.Save_handler', 'memcached') zu speichern; ini_set (

Wie ändern Sie Daten, die in einer PHP -Sitzung gespeichert sind?Wie ändern Sie Daten, die in einer PHP -Sitzung gespeichert sind?Apr 27, 2025 am 12:23 AM

TomodifyDatainaphpSession, startTheSessionwithSession_Start (), dann $ _SessionToSet, modify, orremovevariables.1) startTheSession.2) setOrmodifySessionvariabling $ _Session.3) removeVariables mit ()

Geben Sie ein Beispiel für die Speicherung eines Arrays in einer PHP -Sitzung.Geben Sie ein Beispiel für die Speicherung eines Arrays in einer PHP -Sitzung.Apr 27, 2025 am 12:20 AM

Arrays können in PHP -Sitzungen gespeichert werden. 1. Starten Sie die Sitzung und verwenden Sie Session_Start (). 2. Erstellen Sie ein Array und speichern Sie es in $ _Session. 3. Abrufen Sie das Array durch $ _Session ab. 4. Optimieren Sie Sitzungsdaten, um die Leistung zu verbessern.

Wie funktioniert die Müllsammlung für PHP -Sitzungen?Wie funktioniert die Müllsammlung für PHP -Sitzungen?Apr 27, 2025 am 12:19 AM

Die PHP -Sitzungsmüllsammlung wird durch einen Wahrscheinlichkeitsmechanismus ausgelöst, um abgelaufene Sitzungsdaten zu beseitigen. 1) Legen Sie die Auslöserwahrscheinlichkeit und die Sitzungslebenszyklus in der Konfigurationsdatei ein. 2) Sie können Cron-Aufgaben verwenden, um Hochlastanwendungen zu optimieren. 3) Sie müssen die Häufigkeit und Leistung von Müllsammlungen ausgleichen, um Datenverlust zu vermeiden.

See all articles

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version