小猫咪 小猫畅谈 2021-11-25 12
※原本的new ZipArchive code

function zipArchivefunction($url="",$zipname="",$temp=""){

//$url 档案原始路径+档名
//$zipname 档案名称
//$temp 档案暂存路径+档名

/********利用ZipArchive产生压缩档************/
$zip = new ZipArchive;

$zip->open($temp, ZipArchive::CREATE);

//$zip->addFile($dir); //添加档案 (若有大量档案可使用迴圈)
$new_filename = substr($url, strrpos($url, '/') + 1); //重新定义压缩档路径
$zip->addFile($url, $new_filename);

$zip->close();
/********使用header命令php下载zip档************/

header('Content-Type: application/zip');
//指定类型
header("Content-type: ".filetype("$temp"));
//指定下载时的档名
header("Content-Disposition: attachment; filename=".$zipname."");

//输出下载的内容。
readfile($temp);
unlink($temp); //删除暂存档

}


※php8.0修改过后的new ZipArchive code

function zipArchivefunction($url="",$zipname=""){

//$url 档案原始路径+档名
//$zipname 档案名称

$file = tempnam("/tmp", "zip"); //创建一个zip临时文件

$zip = new ZipArchive;
$res = $zip->open($file, ZipArchive::OVERWRITE);

if ($res) {
$new_filename = substr($url, strrpos($url, '/') + 1); //重新定义压缩档路径
$zip->addFile($url, $new_filename);
}

$zip->close();
/********使用header命令php下载zip档************/
header('Content-Type: application/zip');
//指定文件或目录的类型
header("Content-type: ".filetype($file));
//指定下载时的档名
header("Content-Disposition: attachment; filename=".$zipname."");

//输出下载的内容。
readfile($file);
unlink($file ); //删除暂存档

}

主要差别在于php8.0新增加了一个tempnam()函数创建一个zip临时文件,这样$zip->open就不会出现cannot be empty的问题,经测试档案也能正常的产生为zip档打包下载,有需要的朋友参考看看!!

其他设定说明请参考原本的【Xoops做一个php下载档案自动压缩成ZIP格式方法】工作心得($temp变数不使用)

※档案路径一定要用XOOPS_ROOT_PATH而不是XOOPS_URL,XOOPS_ROOT_PATH是抓绝对路径也就是C:/xampp/htdocs/......

商业许可: 仅限学习交流,不可商用 
※原本的new ZipArchive code

function zipArchivefunction($url="",$zipname="",$temp=""){

//$url 档案原始路径+档名
//$zipname 档案名称
//$temp 档案暂存路径+档名

/********利用ZipArchive产生压缩档************/
$zip = new ZipArchive;

$zip->open($temp, ZipArchive::CREATE);

//$zip->addFile($dir); //添加档案 (若有大量档案可使用迴圈)
$new_filename = substr($url, strrpos($url, '/') + 1); //重新定义压缩档路径
$zip->addFile($url, $new_filename);

$zip->close();
/********使用header命令php下载zip档************/

header('Content-Type: application/zip');
//指定类型
header("Content-type: ".filetype("$temp"));
//指定下载时的档名
header("Content-Disposition: attachment; filename=".$zipname."");

//输出下载的内容。
readfile($temp);
unlink($temp); //删除暂存档

}


※php8.0修改过后的new ZipArchive code

function zipArchivefunction($url="",$zipname=""){

//$url 档案原始路径+档名
//$zipname 档案名称

$file = tempnam("/tmp", "zip"); //创建一个zip临时文件

$zip = new ZipArchive;
$res = $zip->open($file, ZipArchive::OVERWRITE);

if ($res) {
$new_filename = substr($url, strrpos($url, '/') + 1); //重新定义压缩档路径
$zip->addFile($url, $new_filename);
}

$zip->close();
/********使用header命令php下载zip档************/
header('Content-Type: application/zip');
//指定文件或目录的类型
header("Content-type: ".filetype($file));
//指定下载时的档名
header("Content-Disposition: attachment; filename=".$zipname."");

//输出下载的内容。
readfile($file);
unlink($file ); //删除暂存档

}

主要差别在于php8.0新增加了一个tempnam()函数创建一个zip临时文件,这样$zip->open就不会出现cannot be empty的问题,经测试档案也能正常的产生为zip档打包下载,有需要的朋友参考看看!!

其他设定说明请参考原本的【Xoops做一个php下载档案自动压缩成ZIP格式方法】工作心得($temp变数不使用)

※档案路径一定要用XOOPS_ROOT_PATH而不是XOOPS_URL,XOOPS_ROOT_PATH是抓绝对路径也就是C:/xampp/htdocs/......

客服QQ:116622333

Copyright © 2018 Sucaimao.com 主题样式归智速电子商务所有 违者必追究法律责任