返回顶部

收藏

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. 冷乐 发表 2017-09-03 14:45:22 (七)Nginx配置-安装PHP7
  2. Jason long 发表 2017-09-02 09:14:29 C#使用SMTP发送邮件实例
  3. Jason long 发表 2017-09-02 09:14:31 PHP session handler
  4. Jason long 发表 2017-09-02 09:14:32 empty与isset有什么区别
  5. Jason long 发表 2017-09-02 09:14:34 C#采集有声小说控制台(附源码)
  6. Jason long 发表 2017-09-02 09:14:36 shell匹配IP和shell正则匹配捕获引用
  7. Jason long 发表 2017-09-02 09:14:37 C#使用SMTP发送附件
  8. Jason long 发表 2017-09-02 09:14:38 yaf的优点和缺点
  9. Jason long 发表 2017-09-02 09:14:40 使用PHP的APC模块制作上传进度条
  10. Jason long 发表 2017-09-02 09:14:41 yii、yaf、ci等php框架性能对比
  11. Jason long 发表 2017-09-02 09:14:43 用JS实现ping的功能(JS ping url)
  12. funbox 发表 2017-08-31 03:02:55 谈谈Redis的SETNX

发表评论