php实现zip压缩,PHP实现zip压缩解压通用函数

function ezip($zip, $hedef = ''){

$dirname=preg_replace('/.zip/', '', $zip);

$root = $_SERVER['DOCUMENT_ROOT'].'/zip/';

// echo $root. $zip;

$zip = zip_open($root . $zip);

// var_dump($zip);

@mkdir($root . $hedef . $dirname.'/'.$zip_dosya);

while($zip_icerik = zip_read($zip)){

$zip_dosya = zip_entry_name($zip_icerik);

if(strpos($zip_dosya, '.')){

$hedef_yol = $root . $hedef . $dirname.'/'.$zip_dosya;

@touch($hedef_yol);

// echo $hedef_yol;

$yeni_dosya = @fopen($hedef_yol, 'w+');

@fwrite($yeni_dosya, zip_entry_read($zip_icerik));

@fclose($yeni_dosya);

// $yeni_dosya;

}else{

@mkdir($root . $hedef . $dirname.'/'.$zip_dosya);

// echo $root . $hedef . 'x/'.$zip_dosya;

};

};

}

// ezip('yuol.zip','./tr/');

function zip($path) {

$path=preg_replace('/\/$/', '', $path);

preg_match('/\/([\d\D][^\/]*)$/', $path, $matches, PREG_OFFSET_CAPTURE);

$filename=$matches[1][0].".zip";

// var_dump($filename);

// set_time_limit(0);

$zip = new ZipArchive();

$zip->open($filename,ZIPARCHIVE::OVERWRITE);//return ;

// var_dump($path);

if (is_file($path)) {

$path=preg_replace('/\/\//', '/', $path);

$base_dir=preg_replace('/\/[\d\D][^\/]*$/', '/', $path);

$base_dir=addcslashes($base_dir, '/:');

$localname=preg_replace('/'.$base_dir.'/', '', $path);

// var_dump($localname);

$zip->addFile($path,$localname);

// var_dump($path);

$zip->close();

return;

}elseif (is_dir($path)) {

$path=preg_replace('/\/[\d\D][^\/]*$/', '', $path);

$base_dir=$path.'/';//基目录

$base_dir=addcslashes($base_dir, '/:');

// var_dump($base_dir);

}

$path=preg_replace('/\/\//', '/', $path);

// var_dump($path);

function addItem($path,&$zip,&$base_dir){

// var_dump($path);

$handle = opendir($path);

// var_dump($path);

while (false !== ($file = readdir($handle))) {

if (($file!='.')&&($file!='..')){

// var_dump($file);

$ipath=$path.'/'.$file;

if (is_file($ipath)){//条目是文件

$localname=preg_replace('/'.$base_dir.'/', '', $ipath);

var_dump($localname);

$zip->addFile($ipath,$localname);

// var_dump($r);

} else if (is_dir($ipath)){

addItem($ipath,$zip,$base_dir);

$localname=preg_replace('/'.$base_dir.'/', '', $ipath);

var_dump($localname);

$zip->addEmptyDir($localname);

}

// var_dump($path);

}

}

}

// var_dump($base_dir);

addItem($path,$zip,$base_dir);

$zip->close();

}

//调用方法

zip('解压的目录');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值