PHP实现⽂件压缩解压操作的⽅法
在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(将指定⽂件添加到压缩包中)
//将⽂件添加到压缩包中
$zip->addFile(''); //第⼆个参数可对⽂件进⾏重命名
3:addEmptyDir (将指定空⽬录添加到压缩包中)
//将⼀个空的⽬录添加到zip中
$zip->addEmptyDir ('newdir');
4:addFromString(将指定内容的⽂件添加到压缩包)
// 将有指定内容的⽂件添加到zip⽂件中
$zip->addFromString('', '要添加到⽂件中的⽂本');
5:extractTO(将压缩包解压到指定⽬录)
$zip->extractTo('test');
6:getNameIndex(根据索引返回⽂件名称)
$zip->getNameIndex(0);//返回压缩包中索引为0的⽂件名称
7:getStream(根据压缩内的⽂件名称,获取该⽂件的⽂本流)
$zip->getStream('');
8:renameIndex(根据压缩⽂件内的索引(从0开始)修改压缩⽂件内的⽂件名)
/把压缩⽂件内第⼀个⽂件修改成
$zip->renameIndex(0,'');
9:renameName(根据压缩⽂件内的⽂件名,修改压缩⽂件内的⽂件名)
//把压缩⽂件内的修改成
$zip->renameName('','');
10:deleteIndex (根据压缩⽂件内的索引删除压缩⽂件内的⽂件)
/把压缩⽂件内第⼀个⽂件删除
$zip->deleteIndex (0);
11:deleteName(根据压缩⽂件内的⽂件名删除⽂件)
//把压缩⽂件内的删除压缩文件怎么解压
$zip->deleteName('');
上⾯就是ZipArchive的⼀些常⽤⽅法,下⾯来⼀些简单⽰例
⼀:创建⼀个压缩包
$zip = new \ZipArchive;
if ($zip->open('test_new.zip', \ZipArchive::CREATE) === true)
{
// 将指定⽂件添加到zip中
$zip->addFile('');
// ⽂件添加到zip并将其重命名为
$zip->addFile('', '');
// 将⽂件添加到zip⽂件中的test⽂件夹内
$zip->addFile('', '');
//将⼀个空的⽬录添加到zip中
$zip->addEmptyDir ('test');
// 将有指定内容的⽂件添加到zip⽂件中
$zip->addFromString('', '要添加到⽂件中的⽂本');
/
/ 将有指定内容的添加到zip⽂件中的test⽂件夹
$zip->addFromString('', '要添加到⽂件中的⽂本');
//将images⽬录下所有⽂件添加到zip中
if ($handle = opendir('images')){
// 添加⽬录中的所有⽂件
while (false !== ($entry = readdir($handle))){
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('');
// 关闭zip⽂件
$zip->close();
$str = stream_get_contents($stream); //这⾥注意获取到的⽂本编码
var_dump($str);
}
三:修改压缩包内指定⽂件的⽂件名称及删除压缩包内指定⽂件$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
//把压缩⽂件内索引为0的⽂件修改成
$zip->renameIndex(0,'');
/
/把压缩⽂件内的修改成
$zip->renameName('','');
//删除压缩⽂件内索引为0的⽂件
$zip->deleteIndex(0);
//删除压缩⽂件的test.png
$zip->deleteName('test.png');
// 关闭zip⽂件
$zip->close();
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。