php使用ZipArchive类压缩指定目录下所有的文件

/* 方法 */
ZipArchive::addEmptyDir( string $dirname , int $flags = 0 ) : bool 添加新目录
ZipArchive::addFile( string $filepath , string $entryname = "" , int $start = 0 , int $length = 0 , int $flags = ZipArchive::FL_OVERWRITE ) : bool 从给定路径将文件添加到ZIP存档
ZipArchive::addFromString( string $name , string $content , int $flags = ZipArchive::FL_OVERWRITE ) : bool 使用其内容将文件添加到ZIP存档
ZipArchive::addGlob( string $pattern , int $flags = 0 , array $options = [] ) : array|false 按全局模式从目录中添加文件
ZipArchive::addPattern( string $pattern , string $path = "." , array $options = [] ) : array|false 按PCRE模式从目录添加文件
ZipArchive::close( ) : bool 关闭活动存档(打开或新建)
ZipArchive::count( ) : int 统计存档中的文件数
ZipArchive::deleteIndex( int $index ) : bool 使用存档中的索引删除项目
ZipArchive::deleteName( string $name ) : bool 使用其名称删除存档中的条目
ZipArchive::extractTo( string $destination , mixed $entries = ? ) : bool 解压缩文件
ZipArchive::getArchiveComment( int $flags = 0 ) : string|false 返回Zip存档注释
ZipArchive::getCommentIndex( int $index , int $flags = 0 ) : string|false 使用条目索引返回条目的注释
ZipArchive::getCommentName( string $name , int $flags = 0 ) : string|false 使用条目名称返回条目的注释
ZipArchive::GetExternalAttributesIndex( int $index , int &$opsys , int &$attr , int $flags = ? ) : bool 检索由其索引定义的项的外部属性
ZipArchive::getExternalAttributesName( string $name , int &$opsys , int &$attr , int $flags = 0 ) : bool 检索由其名称定义的条目的外部属性
ZipArchive::getFromIndex( int $index , int $len = 0 , int $flags = 0 ) : string|false 使用其索引返回条目内容
ZipArchive::getFromName( string $name , int $len = 0 , int $flags = 0 ) : string|false 使用条目名称返回条目内容
ZipArchive::getNameIndex( int $index , int $flags = 0 ) : string|false 使用索引返回条目的名称
ZipArchive::getStatusString( ) : string 返回状态错误消息、系统和/或zip消息
ZipArchive::getStream( string $name ) : resource|false 获取由其名称定义的条目的文件处理程序(只读)
ZipArchive::static isCompressionMethodSupported( int $method , bool $enc = true ) : bool 检查libzip是否支持压缩方法
ZipArchive::static isEncryptionMethodSupported( int $method , bool $enc = true ) : bool 检查libzip是否支持加密方法
ZipArchive::locateName( string $name , int $flags = 0 ) : int|false 返回存档中条目的索引
ZipArchive::open( string $filename , int $flags = 0 ) : bool|int 打开ZIP文件存档
ZipArchive::registerCancelCallback( callable $callback ) : bool 注册回调以允许在存档关闭期间取消。
ZipArchive::registerProgressCallback( float $rate , callable $callback ) : bool 注册回调以在存档关闭期间提供更新
ZipArchive::renameIndex( int $index , string $new_name ) : bool 重命名由其索引定义的条目
ZipArchive::renameName( string $name , string $new_name ) : bool 重命名由其名称定义的条目
ZipArchive::replaceFile( string $filepath , string $index , int $start = 0 , int $length = 0 , int $flags = 0 ) : bool 用给定路径替换ZIP存档中的文件
ZipArchive::setArchiveComment( string $comment ) : bool 设置ZIP存档的注释
ZipArchive::setCommentIndex( int $index , string $comment ) : bool 设置由其索引定义的条目的注释
ZipArchive::setCommentName( string $name , string $comment ) : bool 设置由其名称定义的条目的注释
ZipArchive::setCompressionIndex( int $index , int $method , int $compflags = 0 ) : bool 设置由其索引定义的条目的压缩方法
ZipArchive::setCompressionName( string $name , int $method , int $compflags = 0 ) : bool 设置由其名称定义的条目的压缩方法
ZipArchive::setEncryptionIndex( int $index , int $method , string|null $password = null ) : bool 设置由索引定义的项的加密方法
ZipArchive::setEncryptionName( string $name , int $method , string|null $password = null ) : bool 设置由其名称定义的条目的加密方法
ZipArchive::setExternalAttributesIndex( int $index , int $opsys , int $attr , int $flags = 0 ) : bool 设置由其索引定义的条目的外部属性
ZipArchive::setExternalAttributesName( string $name , int $opsys , int $attr , int $flags = 0 ) : bool 设置由其名称定义的条目的外部属性
ZipArchive::setMtimeIndex( int $index , int $timestamp , int $flags = 0 ) : bool|null 设置由索引定义的条目的修改时间
ZipArchive::setMtimeName( string $name , int $timestamp , int $flags = 0 ) : bool|null 设置由名称定义的条目的修改时间
ZipArchive::setPassword( string $password ) : bool 设置活动存档的密码
ZipArchive::statIndex( int $index , int $flags = 0 ) : array|false 获取由其索引定义的条目的详细信息
ZipArchive::statName( string $name , int $flags = 0 ) : array|false 获取由其名称定义的条目的详细信息
ZipArchive::unchangeAll( ) : bool 撤消存档中所做的所有更改
ZipArchive::unchangeArchive( ) : bool 还原存档中所做的所有全局更改
ZipArchive::unchangeIndex( int $index ) : bool 恢复对给定索引项所做的所有更改
ZipArchive::unchangeName( string $name ) : bool 还原对具有给定名称的条目所做的所有更改

压缩单个文件

$zip = new ZipArchive();
$zip_path = dirname(__FILE__) . '/file.zip';
if ( $zip->open($zip_path, true) ) {
  $zip->addFile(dirname(__FILE__) . '/text.txt', 'text.txt');
  $zip->close();
}

压缩指定目录下所有的文件包括子目录下的

class Kay_zip {
  public $target_path;
  public $save_path;
  /**
   * 实例化对象时被执行
   * @param [type] $target_path 要压缩的目录
   * @param [type] $save_path   压缩包的绝对路径
   */
  function __construct($target_path, $save_path) {
    $this->target_path = $target_path;
    $this->save_path = $save_path;
    $zip = new ZipArchive();

    if ( $zip->open( $this->save_path, true ) ) {
      $this->addFileToZip( $this->target_path, $zip );
      $zip->close();
    }
  }
  /**
   * 添加文件到压缩包
   * @param [type] $path 目录
   * @param [type] $zip  ZipArchive实例对象
   */
  public function addFileToZip ( $path, $zip ) {
    $handle_path = opendir($path); // 打开目录句柄

    while ( ($read_path = readdir($handle_path)) !== false ) { // 从目录句柄中读取条目
      if ( $read_path !== '.' && $read_path !== '..' ) { // 忽略掉两个目录
        $file_path = $path . DIRECTORY_SEPARATOR . $read_path; // 文件的绝对路径
        if ( is_dir($file_path) ) {
          $this->addFileToZip( $file_path, $zip );
        } else {
          $zip->addFile( $file_path, str_replace(dirname(__FILE__) . DIRECTORY_SEPARATOR, '', $file_path) );
        }
      }
    }
    closedir($handle_path); // 关闭目录句柄
  }
}
new Kay_zip(dirname(__FILE__), dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'file.zip');
评论
:broken_heart: :confounded: :flushed: :frowning: :grinning: :heart: :kissing_heart: :mask: :pensive: :rage: :relaxed: :scream: :smile: :smirk: :sob: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_winking_eye: :wink: