PHP 压缩文件需要用到 ZipArchive 类,Windows 环境需要打开 php_zip.dll扩展。

压缩文件

$zip = new ZipArchive();
// 打开一个zip文档,ZipArchive::OVERWRITE:如果存在这样的文档,则覆盖;ZipArchive::CREATE:如果不存在,则创建
$res = $zip->open('test.zip', ZipArchive::OVERWRITE | ZipArchive::CREATE);
if($res)
{
// 添加 a.txt 到压缩文档
$zip->addFile('a.txt');
// 添加一个字符串到压缩文档中的b.txt
$zip->addFromString('b.txt', 'this is b.txt');
// 添加一个空目录b到压缩文档
$zip->addEmptyDir('b');
}
// 关闭打开的压缩文档
$zip->close();

压缩目录

 /**
* @param $dir 目标目录路径
* @param $zip ZipArchive类对象
* @param $prev
*/
function compressDir($dir, $zip, $prev='.')
{
$handler = opendir($dir);
$basename = basename($dir);
$zip->addEmptyDir($prev . '/' . $basename);
while($file = readdir($handler))
{
$realpath = $dir . '/' . $file;
if(is_dir($realpath))
{
if($file !== '.' && $file !== '..')
{
$zip->addEmptyDir($prev . '/' . $basename . '/' . $file);
compressDir($realpath, $zip, $prev . '/' . $basename);
}
}else
{
$zip->addFile($realpath, $prev. '/' . $basename . '/' . $file);
}
} closedir($handler);
return null;
} $zip = new ZipArchive();
$res = $zip->open('test.zip', ZipArchive::OVERWRITE | ZipArchive::CREATE);
if($res)
{
compressDir('./test', $zip);
$zip->close();
}

解压缩

$zip = new ZipArchive();
$res = $zip->open('test1.zip');
if($res)
{
// 解压缩文件到指定目录
$zip->extractTo('test');
$zip->close();
}

下载压缩包

下载压缩包需要先将目标目录压缩,然后下载压缩包,最后删除压缩包。

在压缩目录示例中,追加以下代码:

header('Content-Type:text/html;charset=utf-8');
header('Content-disposition:attachment;filename=test.zip');
$filesize = filesize('./test.zip');
readfile('./test.zip');
header('Content-length:'.$filesize); unlink('./test.zip');

  

最新文章

  1. mysql数据库乱码的问题解决
  2. BZOJ4690: Never Wait for Weights
  3. C# 消息队列
  4. JS 退出系统并跳转到登录界面的实现代码
  5. asp.net 微信企业号办公系统-表单及流程设计配置实例
  6. HTML5媒体
  7. js(引用类型和setTimeout scope)
  8. 【转】Facebook React 和 Web Components(Polymer)对比优势和劣势
  9. 活生生的例子:qInstallMessageHandler接受指定类型的函数指针,这样就可以随心所欲的让程序员自定义函数名以及函数位置
  10. 来自一位工作一年多的猿的分享 ------- ioc
  11. (cljs/run-at (JSVM. :browser) "简单类型可不简单啊~")
  12. 视觉SLAM
  13. django获取ip与数据重复性判定
  14. 在虚拟机里连接PLC S7-200
  15. java如何获取一个对象的大小【转】
  16. Daily record-December
  17. mysql的常用操作
  18. python3-元类
  19. hibernate框架学习之二级缓存(测试用例)
  20. Can you find it?(数组+二分hdu2141)

热门文章

  1. 【Qt入门实践】Qt之哲学家问题(linux 多线程)
  2. Google's Hybrid Approach to Research
  3. HTTP要点概述:十一,HTTP状态码
  4. 【HDU2037】今年暑假不AC
  5. CentOS 6.5下安装MySQL 5.6.21
  6. the odb manual
  7. CMake使用总结
  8. JeePlus:Maven 安装配置
  9. "Hello world" of ML
  10. 洛谷P4241 采摘毒瘤