php 文件夹打包zip压缩包

/**
 *@desc  生成zip压缩文件的函数
 *
 *@param $dir             string 需要压缩的文件夹名
 *@param $filename     string 压缩后的zip文件名  包括zip后缀
 *@param $missfile      array   不需要的文件
 *@param $fromString  array   自定义压缩文件
 */
public function zip($dir,$filename,$missfile=array(),$addfromString=array())
{
        $profixPath         = substr($filename,0,5);
        if(!file_exists($dir) || !is_dir($dir)){
            die(' can not exists dir '.$dir);
        }
        if(strtolower(end(explode('.',$filename))) != 'zip'){
            die('only Support zip files');
        }
        $dir = str_replace('\\','/',$dir);
        $filename = str_replace('\\','/',$filename);
        $filename = iconv('utf-8','gb2312',$filename);
        if(file_exists($filename)){
            die('the zip file '.$filename.' has exists !');
        }
        if (!is_dir($profixPath)){
            mkdir($profixPath);
        }
        $files = array();
        $this->getfiles($dir,$files);
        $files    = $this->array_iconv($files);
        if(empty($files)){
            die(' the dir is empty');
        }
        $zip = new \ZipArchive();
        $res = $zip->open($filename, \ZipArchive::CREATE);
        if ($res === TRUE) {
            foreach($files as $v){
                if(!in_array(str_replace($dir.'/','',$v),$missfile)){
                    $zip->addFile($v,str_replace($dir.'/','./',$v));
                }
            }
            if(!empty($addfromString)){
                foreach($addfromString as $v){
                    $zip->addFromString($v[0],$v[1]);
                }
            }
            $zip->close();
            echo 'ok';
        } else {
            echo 'failed';
        }
}
//定义图片字符集
public function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8')
{
    if (!is_array($data)) {
        $output = iconv($in_charset, $out_charset, $data);
    } elseif (count($data) === count($data, 1)) {//判断是否是二维数组
        foreach ($data as $key => $value) {
            $output[$key] = iconv($in_charset, $out_charset, $value);
        }
    } else {
        eval_r('$output = ' . iconv($in_charset, $out_charset, var_export($data, TRUE)) . ';');
    }
    return $output;
}

public function getfiles($dir,&$files=array())
{
    if(!file_exists($dir) || !is_dir($dir)){
        return mkdir($dir);
    }
    if(substr($dir,-1)=='/'){
        $dir = substr($dir,0,strlen($dir)-1);
    }
    $_files = scandir($dir);
    foreach($_files as $v){
        if($v != '.' && $v!='..'){
            if(is_dir($dir.'/'.$v)){
                $this->getfiles($dir.'/'.$v,$files);
            }             else             {
                $files[] = $dir.'/'.$v;
            }
        }
    }
    return $files;
}

你可能感兴趣的:(技术专题)