返回顶部

收藏

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. hqlulu <> 发表 2017-11-07 07:00:40 php短标记转换
  2. 信海龙 发表 2017-11-07 15:00:09 PHP7扩展开发之函数调用
  3. 郝聪 <bloghuman@gmail. 发表 2017-11-07 07:30:10 Discuz程序去除forum.php和portal.php的方法
  4. hqlulu <> 发表 2017-11-07 04:02:18 mysql转mysqli
  5. 伯仁 发表 2017-11-06 12:32:01 Mac os Nginx mysql php
  6. 伯仁 发表 2017-11-06 12:35:49 php fsockopen(): unable to connect to java.net.NoR
  7. 伯仁 发表 2017-11-06 12:50:00 Linux上使用php成功链接Microsoft SQL Server
  8. Lok 发表 2017-11-06 11:33:41 CentOS下php5与php7共存
  9. 博主 发表 2017-02-10 07:39:02 【原创】采用xhgui及tideways搭建PHP性能监控平台
  10. 博主 发表 2017-02-15 14:28:47 【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
  11. 伯仁 发表 2017-11-03 07:39:00 centos nginx php mysql 环境安装
  12. 博主 发表 2017-10-05 17:30:45 国庆在家刷个票

发表评论