PHP 压缩文件并下载

 
/*
*$path文件夹路径 
*$filename压缩文件路径 

*/
public function zipupload($path,$filename,$f,$f2,$baseinfo){
        $path = iconv("UTF-8", "GBK", $path);//加这行中文文件夹也ok了
        $this->create_zip($path,$filename);
        if(!file_exists('./' . $filename . '.zip')){
            echo 1;die;
        }

        file_put_contents($f,str_replace($this->auth->id,'#userId', file_get_contents($f)));
        file_put_contents($f,str_replace( $baseinfo['appId'],'#appId',file_get_contents($f)));
        file_put_contents($f,str_replace($baseinfo['appKey'],'#appKey', file_get_contents($f)));
        file_put_contents($f2,str_replace( $this->auth->id,'#userId',file_get_contents($f2)));
        file_put_contents($f2,str_replace($baseinfo['appId'],'#appId', file_get_contents($f2)));
        file_put_contents($f2,str_replace($baseinfo['appKey'],'#appKey', file_get_contents($f2)));


        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-disposition: attachment; filename=' . basename($filename . '.zip')); //文件名
        header("Content-Type: application/zip"); //zip格式的
        header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
        header('Content-Length: ' . filesize('./' . $filename. '.zip')); //告诉浏览器,文件大小
        ob_clean();
        flush();
        @readfile('./' . $filename . '.zip');//下载到本地
        @unlink('./' . $filename . '.zip');//删除服务器上生成的这个压缩文件
    }
    function create_zip($path,$filename){
        $zip = new \ZipArchive();
        if($zip->open($filename.'.zip', \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
            $this->addFileToZip($path, $zip);//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
            $zip->close(); //关闭处理的zip文件
        }
    }
    function addFileToZip($path,$zip){
        $handler=opendir($path); //打开当前文件夹由$path指定。
        while(($filename=readdir($handler))!==false){
            if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
                if(is_dir($path."/".$filename)){
                    $this->addFileToZip($path."/".$filename, $zip);
                }else{
                    $zip->addFile($path."/".$filename);
                }
            }
        }
        @closedir($path);
    }
/**
 * 文件夹文件拷贝
 *
 * @param string $src 来源文件夹
 * @param string $dst 目的地文件夹
 * @return bool
 */
function dir_copy($src = '', $dst = '')
{
    if (empty($src) || empty($dst))
    {
        return false;
    }

    $dir = opendir($src);
    $this->dir_mkdir($dst);
    while (false !== ($file = readdir($dir)))
    {
        if (($file != '.') && ($file != '..'))
        {
            if (is_dir($src . '/' . $file))
            {
                $this->dir_copy($src . '/' . $file, $dst . '/' . $file);
            }
            else
            {
                copy($src . '/' . $file, $dst . '/' . $file);
            }
        }
    }
    closedir($dir);

    return true;
}

/**
 * 创建文件夹
 *
 * @param string $path 文件夹路径
 * @param int $mode 访问权限
 * @param bool $recursive 是否递归创建
 * @return bool
 */
function dir_mkdir($path = '', $mode = 0777, $recursive = true)
{
    clearstatcache();
    if (!is_dir($path))
    {
        mkdir($path, $mode, $recursive);
        return chmod($path, $mode);
    }

    return true;
}

//删除指定文件夹以及文件夹下的所有文件
function deldir($dir) {
    //先删除目录下的文件:
    $dh=opendir($dir);
    while ($file=readdir($dh)) {
        if($file!="." && $file!="..") {
            $fullpath=$dir."/".$file;
            if(!is_dir($fullpath)) {
                unlink($fullpath);
            } else {
                deldir($fullpath);
            }
        }
    }

    closedir($dh);
    //删除当前文件夹:
    if(rmdir($dir)) {
        return true;
    } else {
        return false;
    }
}

 

 

posted @ 2020-09-17 11:20  鲨鱼大王  阅读(814)  评论(0编辑  收藏  举报