php生成zip压缩文件两个实例详解
在php中生成zip文件我们只要使用一个php zip压缩ZipArchive函数就可以了,下面小编来给大家总结两个实现一个是利用ZipArchive生成zip,另一个压缩文件夹下所有文件.
注意: ZipArchive来压缩文件,这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库.
例1,生成zip 压缩文件,代码如下:
<?php /* 生成zip 压缩文件 */ function create_zip( $files = array (), $destination = '' , $overwrite = false) { //if the zip file already exists and overwrite is false, return false if ( file_exists ( $destination ) && ! $overwrite ) { return false; } //vars $valid_files = array (); //if files were passed in... if ( is_array ( $files )) { //cycle through each file foreach ( $files as $file ) { //make sure the file exists if ( file_exists ( $file )) { $valid_files [] = $file ; } } } //if we have good files... if ( count ( $valid_files )) { //create the archive $zip = new ZipArchive(); if ( $zip ->open( $destination , $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; } //add the files foreach ( $valid_files as $file ) { $file_info_arr = pathinfo ( $file ); $zip ->addFile( $file , $file_info_arr [ 'basename' ]); //去掉层级目录 } //debug //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status; //close the zip -- done! $zip ->close(); //check to make sure the file exists return file_exists ( $destination ); } else { return false; } } define( 'ROOTPATH' ,dirname ( __FILE__ )); //网站路径 $files_to_zip = array ( ROOTPATH.DIRECTORY_SEPARATOR. 'PHP+jQuery+Cookbook.pdf' , //开源代码phpfensi测试数据 ROOTPATH.DIRECTORY_SEPARATOR. 'TurboListerZeroTemplate.csv' ); //if true, good; if false, zip creation failed $filename = 'my-archive.zip' ; $result = create_zip( $files_to_zip , $filename ); ?>例2,压缩文件夹下面的所有文夹,代码如下:
<?php /* php zip压缩文件夹下面的所有文件 */ class HZip { /** * 添加文件和子目录的文件到zip文件 * @param string $folder * @param ZipArchive $zipFile * @param int $exclusiveLength Number of text to be exclusived from the file path. */ private static function folderToZip( $folder , & $zipFile , $exclusiveLength ) { $handle = opendir( $folder ); while (false !== $f = readdir( $handle )) { if ( $f != '.' && $f != '..' ) { $filePath = "$folder/$f" ; // Remove prefix from file path before add to zip. $localPath = substr ( $filePath , $exclusiveLength ); if ( is_file ( $filePath )) { $zipFile ->addFile( $filePath , $localPath ); } elseif ( is_dir ( $filePath )) { // 添加子文件夹 $zipFile ->addEmptyDir( $localPath ); self::folderToZip( $filePath , $zipFile , $exclusiveLength ); } } } closedir ( $handle ); } /** * Zip a folder (include itself). * Usage: * HZip::zipDir('/path/to/sourceDir', '/path/to/out.zip'); * * @param string $sourcePath Path of directory to be zip. * @param string $outZipPath Path of output zip file. */ public static function zipDir( $sourcePath , $outZipPath ) { $pathInfo = pathInfo ( $sourcePath ); $parentPath = $pathInfo [ 'dirname' ]; $dirName = $pathInfo [ 'basename' ]; $sourcePath = $parentPath . '/' . $dirName ; //防止传递'folder' 文件夹产生bug $z = new ZipArchive(); $z ->open( $outZipPath , ZIPARCHIVE::CREATE); //建立zip文件 $z ->addEmptyDir( $dirName ); //建立文件夹 self::folderToZip( $sourcePath , $z , strlen ( "$parentPath/" )); $z ->close(); } } //使用方法 HZip::zipDir( 'yourlife' , 'yourlife.zip' ); ?>ziparchive 可选参数:
1.ZipArchive::addEmptyDir
添加一个新的文件目录
2.ZipArchive::addFile
将文件添加到指定zip压缩包中。
3.ZipArchive::addFromString
添加的文件同时将内容添加进去
4.ZipArchive::close
关闭ziparchive
5.ZipArchive::extractTo
将压缩包解压
6.ZipArchive::open
打开一个zip压缩包
7.ZipArchive::getStatusString
返回压缩时的状态内容,包括错误信息,压缩信息等等
8.ZipArchive::deleteIndex
删除压缩包中的某一个文件,如:deleteIndex(0)删除第一个文件
9.ZipArchive::deleteName
删除压缩包中的某一个文件名称,同时也将文件删除.
查看更多关于php生成zip压缩文件两个实例详解 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30351