亲宝软件园·资讯

展开

php压缩文件夹并下载到本地

勿回头 人气:2

 

/**
* @param $path 要压缩的文件夹路径
* @param $filename 要生成的压缩包名称
*/
public 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文件
  }
}

 

//递归写入压缩包
public 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 $path 要下载的文件路径
* @param $filename 保存的文件名
*/
public function downloadTemplate($path,$filename){

  header("Content-type:text/html;charset=utf-8");
  if(!file_exists($path)){
    echo "下载文件不存在!";exit; //如果提示这个错误,很可能你的路径不对,可以打印$file_sub_path查看
  }

  $fp=fopen($path,"r");

  $file_size=filesize($path);

  //下载文件需要用到的头

  Header("Content-type: application/octet-stream");

  Header("Accept-Ranges: bytes");

  Header("Accept-Length:".$file_size);

  Header("Content-Disposition: attachment; filename=".$filename);

  $buffer=1024;

  $file_count=0;

  while(!feof($fp) && $file_count<$file_size){
    $file_con=fread($fp,$buffer);
    $file_count+=$buffer;
    echo $file_con;
  }

  fclose($fp); //关闭这个打开的文件
}

 

$path = 'qrcode/'.$pid.'/'.date('Y-m-d'); //服务器文件路径
$filename = 'qrcode/'.$pid.'/'.date('Y-m-d'); //想要生成的压缩包

//开始压缩文件并且下载到本地
$this->create_zip($path,$path); //我这里生成的压缩包放在同一个目录下面 就不搞多一个路径 + 文件名了
$this->downloadTemplate($filename.'.zip',$pid.date('Y-m-d').'.zip');  // !!!!切记  下载文件不要用ajax  下载文件不要用ajax  下载文件不要用ajax  重要的事情说三遍!

 

加载全部内容

相关教程
猜你喜欢
用户评论