在php中,有时候我们需要用到压缩文件操作。压缩文件可以节省磁盘空间;压缩文件体积更小,便于网络传输,效率高。下面我们来了解一下php的压缩和解压相关操作。PHP类中有一个ZipArchive,专门用于文件压缩和解压相关操作。ZipArchive类中主要使用了以下方法:1:open(打开一个压缩文件)$zip=new\ZipArchive;$zip->open('test_new.zip',\ZipArchive::CREATE)第一个参数:要打开的归档文件第二个参数:ZIPARCHIVE::OVERWRITE总是创建一个新文件,如果指定的zip文件存在,它将覆盖ZIPARCHIVE::CREATE如果指定的zip文件不存在,则创建一个新的ZIPARCHIVE::EXCL如果指定的zip文件存在,将报错ZIPARCHIVE::CHECKCONS对指定的zip执行其他一致性测试2:addFile(将指定文件添加到压缩包中)//将test.txt文件添加到压缩包中$zip->addFile('test.txt');//第二个参数可以重命名文件3:addEmptyDir(将指定的空目录添加到压缩包中)//将一个空目录添加到zip$zip->addEmptyDir('newdir');4:addFromString(将指定内容的文件添加到压缩包中)//将指定内容的new.txt文件添加到zip文件中$zip->addFromString('new.txt','待添加的文本到new.txt文件');5:extractTO(将压缩包解压到指定目录)$zip->extractTo('test');6:getNameIndex(根据索引返回文件名)$zip->getNameIndex(0);//返回压缩包中索引为0的文件名7:getStream(根据压缩包中的文件名,获取文件的文本流)$zip->getStream('hello.txt');8:renameIndex(根据压缩文件中的索引(从0开始)修改压缩文件中的文件名)/修改压缩文件中第一个文件为newname.txt$zip->renameIndex(0,'newname.txt');9:renameName(根据压缩文件中的文件名,修改压缩文件中的文件名)//将压缩文件中的word.txt修改为newword.txt$zip->renameName('word.txt','newword.txt');10:deleteIndex(根据压缩文件中的索引删除压缩文件中的文件)/删除压缩文件中的第一个文件$zip->deleteIndex(0);11:deleteName(根据压缩文件中的文件名删除文件)//删除压缩文件中的word.txt$zip->deleteName('word.txt');以上是ZipArchive的一些常用方法,下面是一些简单的例子1:创建压缩包$zip=new\ZipArchive;if($zip->open('test_new.zip',\ZipArchive::CREATE)===true){//添加指定的文件到zip$zip->addFile('test.txt');//将test.txt文件添加到zip并将其重命名为newfile.txt$zip->addFile('test.txt','newfile.txt');//将test.txt文件添加到zip文件中$zip->addFile('test.txt','test/newfile.txt')中的test文件夹中;//向zip添加一个空目录$zip->addEmptyDir('test');//将指定内容的new.txt文件添加到zip文件中$zip->addFromString('new.txt','要添加到new.txt文件中的文本');//会有新的。txt添加到zip文件中的测试文件夹$zip->addFromString('test/new.txt','要添加到new.txt文件中的文本');//将images目录下的所有文件添加到zip中{if($entry!="."&&$entry!=".."&&!is_dir('images/'.$entry)){$zip->addFile('images/'.$entry);}}closedir($handle);}//关闭zip文件$zip->close();}二:获取压缩包文件信息并解压指定压缩包$zip=new\ZipArchive;if($zip->open('test_new.zip')===true){//获取索引为0的文件名var_dump($zip->getNameIndex(0));//解压压缩包文件到test目录$zip->extractTo('test');//获取压缩包中指定文件的文本流$stream=$zip->getStream('test.txt');//关闭zip文件$zip->close();$str=stream_get_contents($stream);//注意获取的文本编码var_dump($str);}三:修改压缩包中指定文件文件名并删除压缩包中指定文件$zip=new\ZipArchive;if($zip->open('test_new.zip')===true){//将压缩文件中索引为0的文件修改为newname.txt$zip->renameIndex(0,'newname.txt');//修改压缩文件中的new.txt为newword.txt$zip->renameName('new.txt','newword.txt');//删除压缩文件中index为0的文件$zip->deleteIndex(0);//删除压缩文件的test.png$zip->deleteName('test.png');//关闭压缩文件$zip->close();}
