返回顶部

收藏

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('解压的目录');

标签:php

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. Leo Chen 发表 2016-05-29 22:23:16 PHP的错误和异常处理总结
  2. Leo Chen 发表 2016-08-04 11:53:39 又撸了一个开源项目
  3. Leo Chen 发表 2016-08-09 10:47:44 关于PSR-6的一些思考
  4. Leo Chen 发表 2016-10-13 16:22:31 simple_cas_server项目废弃,新建两个坑
  5. Leo Chen 发表 2016-10-30 17:25:06 PHP CAS Server/Laravel CAS Server 2.0发布
  6. Leo Chen 发表 2017-03-08 01:00:51 Laravel 技巧之 定时任务
  7. Leo Chen 发表 2017-06-26 11:01:29 API 文档神器 Swagger 介绍及在 PHP 项目中使用
  8. techug 发表 2017-08-16 13:42:18 10位顶级PHP大师的开发原则
  9. techug 发表 2017-08-18 04:24:45 PHP大小写不敏感问题汇总
  10. Younes Rafie 发表 2017-08-17 16:00:26 How to Master Your API Workflow with Postman
  11. xinlu 发表 2017-08-15 07:00:06 PHP的伪注解:@var
  12. 冯定波 发表 2014-01-21 15:09:33 Memcache安全配置

发表评论