将来的你, 肯定会感激现在拼命的自己。
  • php
  •  2014.12.01 17:41
  •  266

php解压文件、压缩文件或文件夹的实现方法

快下班了,其他就不多了,直接上代码,本人测试是没问题的。

/**
 * 压缩文件或文件夹
 * @param type $files
 * @param type $des
 * @param type $overwrite
 * @return boolean
 */
function zip( $files, $des = '', $overwrite = false ) {
    if ( file_exists( $des ) && !$overwrite ) { //检测zip文件是否存在
        return false;
    }
    if ( is_array( $files ) ) {
        if ( is_array( $files ) ) { //检测文件是否存在
            foreach ( $files as $file ) { //循环通过每个文件
                if ( file_exists( $file ) ) { //确定这个文件存在
                    $valid_files[] = $file;
                }
            }
        }
        if ( count( $valid_files ) ) {
            $zip = new ZipArchive(); //创建zip文件
            if ( $zip->open( $des, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE  ) === true ) {
                return false;
            }
            foreach ( $valid_files as $file ) { //添加文件
                $zip->addFile( $file, $file );
            }
            $zip->close();
            return file_exists( $des );
        } else {
            return false;
        }
    } else {
        if ( !is_dir( $files ) ) {
            return false;
        }

        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( $des, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE  ) !== true ) {
            return false;
        }
        addFileToZip( $files, $zip ); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
        $zip->close();
        return file_exists( $des );
    }
}

/**
 * 解压文件
 * @param type $file
 * @param type $destination
 * @return boolean
 */
function unzip( $file, $destination ) {
    $zip = new ZipArchive();
    if ( $zip->open( $file ) !== true ) {
        return false;
    } else {
        $zip->extractTo( $destination );
        $zip->close();
        return true;
    }
}

如果你觉得需要请收藏或分享给你的朋友们。


 钟永标

个人头像


 热门推荐


 热门阅读