返回顶部

收藏

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. 海运 发表 2018-02-18 04:32:38 dnspod php api ddns
  2. 张 鑫旭 发表 2018-02-08 16:29:10 CORS ajax跨域请求php简单完整案例一则
  3. yanxinchi 发表 2018-02-08 14:54:16 被传倒闭后,A站员工在公司快乐的包饺子,正在大量招人
  4. Lok 发表 2018-02-06 02:15:07 PHP判断是否为手机浏览器
  5. 博主 发表 2015-05-13 02:35:00 ubuntu 下使用 phpbrew 安装php
  6. 博主 发表 2018-02-05 11:39:00 福利 - 一个php商城,用来做蛋糕的
  7. hqlulu <> 发表 2017-11-07 04:02:18 mysql转mysqli
  8. hqlulu <> 发表 2017-11-07 07:00:40 php短标记转换
  9. hqlulu <> 发表 2017-11-10 04:20:34 CI的session功能在PHP7.1下不可用
  10. hqlulu <> 发表 2017-11-15 06:20:01 phpMyadmin设置自动连接数据库
  11. phpvar 发表 2011-12-01 13:29:48 php字符串连接输出
  12. phpvar 发表 2011-12-31 14:50:02 dreamweaver 应用注释css、js、php的快捷键

发表评论