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