您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2615|回复: 0

分享一个zip压缩解压函数

[复制链接]

111

主题

112

帖子

375

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
375
QQ
发表于 2013-8-7 21:29:25 | 显示全部楼层 |阅读模式
zip压缩解压函数
  1. <?php
  2. function ezip($zip, $hedef = ''){
  3.     $dirname=preg_replace('/.zip/', '', $zip);
  4.     $root = $_SERVER['DOCUMENT_ROOT'].'/zip/';
  5.     // echo $root. $zip;
  6.     $zip = zip_open($root . $zip);
  7.     // var_dump($zip);
  8.     @mkdir($root . $hedef . $dirname.'/'.$zip_dosya);
  9.     while($zip_icerik = zip_read($zip)){

  10.         $zip_dosya = zip_entry_name($zip_icerik);
  11.         if(strpos($zip_dosya, '.')){
  12.             $hedef_yol = $root . $hedef . $dirname.'/'.$zip_dosya;
  13.             @touch($hedef_yol);
  14.             // echo $hedef_yol;
  15.             $yeni_dosya = @fopen($hedef_yol, 'w+');
  16.             @fwrite($yeni_dosya, zip_entry_read($zip_icerik));
  17.             @fclose($yeni_dosya);
  18.             // $yeni_dosya;

  19.         }else{
  20.             @mkdir($root . $hedef . $dirname.'/'.$zip_dosya);
  21.             // echo $root . $hedef . 'x/'.$zip_dosya;
  22.         };
  23.     };
  24. }
  25. // ezip('yuol.zip','./tr/');

  26. function zip($path) {
  27.     $path=preg_replace('/\/$/', '', $path);
  28.     preg_match('/\/([\d\D][^\/]*)$/', $path, $matches, PREG_OFFSET_CAPTURE);
  29.     $filename=$matches[1][0].".zip";
  30.     // var_dump($filename);
  31.     // set_time_limit(0);
  32.     $zip = new ZipArchive();
  33.     $zip->open($filename,ZIPARCHIVE::OVERWRITE);//return ;
  34.     // var_dump($path);
  35.     if (is_file($path)) {
  36.         $path=preg_replace('/\/\//', '/', $path);
  37.         $base_dir=preg_replace('/\/[\d\D][^\/]*$/', '/', $path);
  38.         $base_dir=addcslashes($base_dir, '/:');

  39.         $localname=preg_replace('/'.$base_dir.'/', '', $path);
  40.         // var_dump($localname);
  41.         $zip->addFile($path,$localname);
  42.         // var_dump($path);
  43.         $zip->close();
  44.         return;
  45.     }elseif (is_dir($path)) {
  46.         $path=preg_replace('/\/[\d\D][^\/]*$/', '', $path);
  47.         $base_dir=$path.'/';//基目录
  48.         $base_dir=addcslashes($base_dir, '/:');
  49.         // var_dump($base_dir);
  50.     }
  51.     $path=preg_replace('/\/\//', '/', $path);
  52.     // var_dump($path);
  53.     function addItem($path,&$zip,&$base_dir){
  54.         // var_dump($path);
  55.         $handle = opendir($path);
  56.         // var_dump($path);
  57.         while (false !== ($file = readdir($handle))) {
  58.             if (($file!='.')&&($file!='..')){
  59.                 // var_dump($file);
  60.                 $ipath=$path.'/'.$file;
  61.                 if (is_file($ipath)){//条目是文件
  62.                     $localname=preg_replace('/'.$base_dir.'/', '', $ipath);
  63.                     var_dump($localname);
  64.                     $zip->addFile($ipath,$localname);
  65.                     // var_dump($r);
  66.                 } else if (is_dir($ipath)){
  67.                     addItem($ipath,$zip,$base_dir);
  68.                     $localname=preg_replace('/'.$base_dir.'/', '', $ipath);
  69.                     var_dump($localname);
  70.                     $zip->addEmptyDir($localname);
  71.                 }
  72.                 // var_dump($path);
  73.             }
  74.         }
  75.     }
  76.     // var_dump($base_dir);
  77.     addItem($path,$zip,$base_dir);
  78.     $zip->close();
  79. }
  80. zip('D:/wamp/www/sample/main/');
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

      本站部分内容来自互联网,如有侵权,请提前告知,谢谢! WEB开发技术交流群
    Archiver|手机版| QQ

GMT+8, 2018-4-25 14:35 , Processed in 0.077537 second(s), 28 queries .

© 2012-2013 Powered by Discuz! X3. Theme By Yeei!

快速回复 返回顶部 返回列表