PHP-将某一目录下文件压缩成zip格式
//Start to compress files $zipfiles = listFileName('./','txt'); $zipfile = '/test.zip'; create_zip($zipfiles, $zipfile, true); foreach($zipfiles as $file){ unlink($file);//不能直接在create_zip方法中删除文件,因为当时正在压缩 } /** * @brief create_zip * Multiple files compressed into a zip format * * @param array $files wait for compressed files. Advice into relative path -> './test.log', * otherwise file path will similar to the compressed files path * @param string $destination compressed file -> save path * @param bool $overwrite default:true . if it's seted true and the file exists,it will overwrite * * @return bool */ 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; } $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 file exists,overwrite,else,create if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; } //add the files foreach($valid_files as $file) { $zip->addFile($file,basename($file)); } $zip->close(); //check to make sure the file exists return file_exists($destination); }else{ return false; } } /** * @brief listFileName * Rated R lists all the file name * * @param string $dir dirname * @param string $extension only the file extension will save * * @return array */ function listFileName($dir,$extension){ static $filename = array(); if(is_dir($dir)){ $files = scandir($dir); foreach($files as $file){ if(!in_array($file,array('.','..'))){ $file_dir = $dir.'/'.$file; listFileName($file_dir,$extension); } } }else{ $path_parts = pathinfo($dir); if($path_parts['extension'] == $extension){ $filename[] = $dir; } } return $filename; }