⼏⾏代码轻松实现PHP⽂件打包下载zip
本⽂实例为⼤家分享了PHP⽂件打包下载zip的具体代码,供⼤家参考,具体内容如下
<?php
//获取⽂件列表
function list_dir($dir){
$result = array();
if (is_dir($dir)){
$file_dir = scandir($dir);
foreach($file_dir as $file){
if ($file == '.' || $file == '..'){
continue;
}
elseif (is_dir($dir.$file)){
$result = array_merge($result, list_dir($dir.$file.'/'));
}
else{
array_push($result, $dir.$file);
}
}
}
return $result;
}
/
/获取列表
$datalist=list_dir('../');
$filename = "./bak.zip"; //最终⽣成的⽂件名(含路径)
if(!file_exists($filename)){
//重新⽣成⽂件
$zip = new ZipArchive();//使⽤本类,linux需开启zlib,windows需取消php_zip.dll前的注释
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit('⽆法打开⽂件,或者⽂件创建失败');
}
foreach( $datalist as $val){
if(file_exists($val)){
php手机版下载$zip->addFile( $val, basename($val));//第⼆个参数是放在压缩包中的⽂件名称,如果⽂件可能会有重复,就需要注意⼀下
}
}
$zip->close();//关闭
}
if(!file_exists($filename)){
exit("⽆法到⽂件"); //即使创建,仍有可能失败。。。。
}
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($filename)); //⽂件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是⼆进制⽂件
header('Content-Length: '. filesize($filename)); //告诉浏览器,⽂件⼤⼩
@readfile($filename);
>
PHP ZipArchive是PHP⾃带的扩展类,可以轻松实现ZIP⽂件的压缩和解压,使⽤前⾸先要确保PHP ZIP扩展已经开启,具体开启⽅法这⾥就不说了,不同的平台开启PHP扩增的⽅法⽹上都有,如有疑问欢迎交流。
这⾥整理⼀下利⽤php zipArchive进⾏⽂件的压缩与解压缩的常⽤的⽰例供参考。
⼀、解压缩zip⽂件
$zip=new ZipArchive;//新建⼀个ZipArchive的对象
if($zip->open('test.zip')===TRUE){
$zip->extractTo('images');//假设解压缩到在当前路径下images⽂件夹内
$zip->close();//关闭处理的zip⽂件
}
⼆、将⽂件压缩成zip⽂件
$zip=new ZipArchive;
if($zip->open('test.zip',ZipArchive::OVERWRITE)===TRUE){
$zip->addFile('');//假设加⼊的⽂件名是,在当前路径下
$zip->close();
}
三、⽂件追加内容添加到zip⽂件
$zip=new ZipArchive;
$res=$zip->open('test.zip',ZipArchive::CREATE);
if($res===TRUE){
$zip->addFromString('','file content goes here');
$zip->close();
echo 'ok';
}else{
echo 'failed';
}
四、将⽂件夹打包成zip⽂件
function addFileToZip($path,$zip){
$handler=opendir($path); //打开当前⽂件夹由$path指定。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//⽂件夹⽂件名字为'.'和‘..',不要对他们进⾏操作
if(is_dir($path."/".$filename)){// 如果读取的某个对象是⽂件夹,则递归
addFileToZip($path."/".$filename, $zip);
}else{ //将⽂件加⼊zip对象
$zip->addFile($path."/".$filename);
}
}
}
@closedir($path);
}
$zip=new ZipArchive();
if($zip->open('images.zip', ZipArchive::OVERWRITE)=== TRUE){
addFileToZip('images/', $zip); //调⽤⽅法,对要打包的根⽬录进⾏操作,并将ZipArchive的对象传递给⽅法 $zip->close(); //关闭处理的zip⽂件
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论