找回密码
 注册

[PHP] PHP压缩文件夹和子目录为zip文件 使用内置ZipArchive类实现

php 发表于 2015/12/17 02:53 | 显示全部楼层 |阅读模式
PHP ZipArchive压缩目录及子目录所有文件为ZIP压缩包文件,使用PHP核心内置的ZipArchive + RecursiveIteratorIterator + RecursiveDirectoryIterator实现ZipArchive压缩文件夹及下级文件夹中的全部文件为ZIP压缩包。
PHP ZipArchive类需要php_zip.dll扩展支持,从PHP 5.3开始已经内置在PHP核心中,默认可用,无需手动开启。
PHP压缩文件夹函数为ZIP文件的代码及示例。如果文件名包含中文等当前PHP版本不支持的字符,请自行转码。PHP 7.1+支持UTF-8文件名和I/O流,不需要转码。建议使用最高版本的PHP程序减少不必要的麻烦。
  1. <?php
  2.         /**
  3.          * PHP ZipArchive压缩文件夹,实现将目录及子目录中的所有文件压缩为zip文件
  4.          * @author 吴先成 wuxiancheng.cn 高阶代码 原创发布
  5.          * @param string $folderPath 要压缩的目录路径 绝对路径和相对路径都可以
  6.          * @param string $zipAs 压缩包文件的文件名,可以带路径,不能为空
  7.          * @return bool 成功时返回true,否则返回false
  8.          */
  9.         function zipFolder($folderPath, $zipAs){
  10.                 if(!is_scalar($folderPath) || !is_scalar($zipAs)){
  11.                         return false;
  12.                 }
  13.                 $folderPath = (string)$folderPath;
  14.                 $folderPath = str_replace('\\', '/', $folderPath);               
  15.                 $zipAs = (string)$zipAs;
  16.                 if($zipAs === ''){
  17.                         return false;
  18.                 }
  19.                 try{
  20.                         $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folderPath, RecursiveDirectoryIterator::UNIX_PATHS|RecursiveDirectoryIterator::CURRENT_AS_SELF|RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD);
  21.                         $zipObject   = new ZipArchive();
  22.                         $errorCode = $zipObject->open($zipAs, ZipArchive::CREATE|ZipArchive::OVERWRITE);
  23.                         if($errorCode !== true){
  24.                                 return false;
  25.                         }
  26.                         foreach($files as $file){
  27.                                 $zipObject->addFile($file->getSubPathname());
  28.                         }
  29.                         if($zipObject->close()){
  30.                                 return true;
  31.                         }
  32.                 }catch(Exception $e){                        
  33.                 }
  34.                 return false;
  35.         }
  36.         /* 语法举例 */
  37.         if(zipFolder(getcwd(), 'wuxiancheng.cn.backup.zip')){
  38.                 echo 'success';
  39.         }else{
  40.                 echo 'failure';
  41.         }
  42. ?>
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
neverchange2007 发表于 2016/5/30 22:13 | 显示全部楼层
子目录为zip文件 使用内置ZipArchive类实现 [修改]
回复

使用道具 举报

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表