Home  >  Article  >  Backend Development  >  php关于zip的应用

php关于zip的应用

WBOY
WBOYOriginal
2016-06-13 13:06:45833browse

php关于zip的使用

/**
	 * 
	 * 创建压缩包
	 * @param array $arr 需要压缩的文件部分路径和文件名,形如 array(
	 *   '/file/upload/1.php',
	 *   '/file/upload/2011/1.jpg',
	 * )
	 * 
	 * @return string 压缩包的部分路径和文件名,形如/file/uplaod/zip/123.zip
	 */
	public static function zip($arr)
	{
	    //首先我建立一个目录
	    $save_path = '/file/upload/zip' . Dat::getHourPath();
	    $path = APPLICATION_PATH . '/destoon' . $save_path;
	    Sys::createDir($path);
	    
	    $zipname = strval(time()) . mt_rand(100000, 999999) . '.zip';
	    $zip_fullname = $path . '/' . $zipname;
	    $zip_obj = new ZipArchive();
        if ($zip_obj->open($zip_fullname, ZIPARCHIVE::CREATE) !== true) { 
            return false; 
        } 
        foreach ($arr as $value) { 
        //  $zip->addFile($path, mb_convert_encoding ( basename($path), 'GBK'  ,'UTF-8')); 
            $zip_obj->addFile( APPLICATION_PATH . '/destoon' . $value, basename($value) ); 
        } 
        $zip_obj->close();
        return $save_path . '/' . $zipname;
	    
	}
	
	/**
	 * 解压缩
	 * 
	 * @param string $zipname 压缩包的部分路径和文件名,形如'/file/upload/1.zip'
	 * @param string $path 解压后的文件夹全路径
	 * 
     * @return array 解压后的文件数组,部分路径和文件名,形如array(
     *     '/file/1.php',
     *     '/file/12.png',
     * )
	 */
	public static function unzip($zipname , $path='')
	{
	    if (!$path ) {
	        $path = '/file/tempzip_folder/' .
               strval(time()) . mt_rand(100000, 999999);
	    
            $newpath = APPLICATION_PATH . '/destoon' . $path; 
	    }
	    else {
	        $newpath = $path;
	        $path = preg_replace('#^.+/destoon(.+)$#', '$1', $newpath);
	    }
	    
        Sys::createDir($newpath);
            
        $filename = APPLICATION_PATH . '/destoon' . $zipname;
        //第一件事是解压
        $zip = new ZipArchive();
        $arr = array();
        if ($zip->open($filename) === true) {
            $zip->extractTo($newpath);
            $zip->close();
            
            $temp = scandir($newpath);
            foreach ($temp as $value) {
                if ($value != '.' && $value != '..') {
                    $arr[] = $path . '/' . basename($value);
                }
            }
        }
        return $arr;
	    
	}
	
	
	

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn