/* *$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; } }