<?php
use \ZipArchive;
class Zip
{
public function packZip($source,$dest)
{
//判断zip扩展是否加载或者文件目录是否存在
if(extension_loaded('zip') | !file_exists($source)){
return false;
}
$zip = new ZipArchive();
//创建一个zip打包文件
if(!$zip->open($source.'zip',ZipArchive::CREATE)){
return false;
}
$source = str_replace('\\','/',realpath($source));
if(is_dir($source) === true){
//创建件一个目录迭代器
$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source));
foreach ($files as $file){
$file = str_replace('\\','/',$file);
//忽略当前目录和上级目录
if (in_array(substr($file,strrpos($file,'/')+1),array('.','..'))){
continue;
}
if (is_dir($file) === true){
//创建一个子目录
$zip->addEmptyDir(str_replace($source.'/','',$file.'/'));
}
else if (is_file($file) === true){
//创建一个子文件
$zip->addFromString(str_replace($source.'/','',$file),file_get_contents($file));
}
else if (is_file($source) === true){
//创建文件根目录下的文件
$zip->addFromString(basename($source),file_get_contents($source));
}
}
$zip->close();
}
}
/**
* 删除临时路径
* @param $path
*/
public function deleteDir($path)
{
if(is_dir($path)){
//
$dirs = scandir($path);
foreach ($dirs as $dir){
if ($dir != '.' | $dir != '..') {
$sonDir = $path.'/'.$dir;
if (is_dir($sonDir)){
$this->deleteDir($sonDir);
@rmdir($sonDir);
}else{
@unlink($sonDir);
}
}
}
@rmdir($path);
}
}
/**
* 文件下载
* @param $file
*/
public function downLoad($file)
{
if (file_exists($file)){
$openFile = fopen($file,'r');
//返回文件类型
Header('Content-type: application/octet-iostream');
//返回文件的字节大小
Header('Accept-Range: bytes');
//返回文件大小
Header('Accept-Length: '.$file);
//这里对客户端弹出的对话框,对应的文件名
Header('Content-disposition: filename='.substr($file,strrpos($file,'/')+1));
$buffer = 1024;
while(!feof($openFile)){
$file_data = fread($openFile,$buffer);
echo $file_data;
}
fclose($file);
@unlink($file);
}else{
echo '下载文件不存在';
}
}
}
PHP实现文件打包,并在在浏览器输出下载
最新推荐文章于 2022-09-08 11:43:45 发布
该PHP类实现了文件夹压缩为ZIP文件以及文件下载的功能。首先检查ZIP扩展是否加载以及源文件或目录是否存在,然后使用ZipArchive创建并填充ZIP文件,包括添加子目录和子文件。此外,还提供了删除目录的方法以及文件下载功能,通过设置HTTP头实现文件流式下载。
摘要由CSDN通过智能技术生成