PHP 解压 ZIP 文件到指定文件夹

本类实现参考 php manual 评论

/**
 *  function: 解压zip 格式的文件
 *  author:friker
 *  date:2015-15-14
 *  reference:http://php.net/manual/zh/ref.zip.php
 *  all rights reserved:[email protected]
 */

class Unzip{

   public function __construct(){
       //init code here...
  	   header("content-type:text/html;charset=utf8");
   }

   /**
	* 解压文件到指定目录
	*
	* @param   string   zip压缩文件的路径
	* @param   string   解压文件的目的路径
	* @param   boolean  是否以压缩文件的名字创建目标文件夹
	* @param   boolean  是否重写已经存在的文件
	*
	* @return  boolean  返回成功 或失败
	*/
   public function unzip($src_file, $dest_dir=false, $create_zip_name_dir=true, $overwrite=true){

    if ($zip = zip_open($src_file)){
        if ($zip){
            $splitter = ($create_zip_name_dir === true) ? "." : "/";
		    if($dest_dir === false){
		        $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter))."/";
	        }

            // 如果不存在 创建目标解压目录
            $this->create_dirs($dest_dir);

             // 对每个文件进行解压
             while ($zip_entry = zip_read($zip)){
					// 文件不在根目录
					$pos_last_slash = strrpos(zip_entry_name($zip_entry), "/");
					if ($pos_last_slash !== false){
						// 创建目录 在末尾带 /
						$this->create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1));
					}

                    // 打开包
                    if (zip_entry_open($zip,$zip_entry,"r")){

                        // 文件名保存在磁盘上
                        $file_name = $dest_dir.zip_entry_name($zip_entry);

                        // 检查文件是否需要重写
                        if ($overwrite === true || $overwrite === false && !is_file($file_name)){
                            // 读取压缩文件的内容
                            $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

                            @file_put_contents($file_name, $fstream);
                            // 设置权限
                            chmod($file_name, 0777);
                            echo "save: ".$file_name."<br />";
                        }

                        // 关闭入口
                        zip_entry_close($zip_entry);
                    }
                }
                // 关闭压缩包
                zip_close($zip);
            }
        }else{
            return false;
        }
        return true;
    }

	/**
	* 创建目录
	*/
	public function create_dirs($path){
	  if (!is_dir($path)){
		  $directory_path = "";
		  $directories = explode("/",$path);
		  array_pop($directories);

		  foreach($directories as $directory){
			  $directory_path .= $directory."/";
			  if (!is_dir($directory_path)){
				  mkdir($directory_path);
				  chmod($directory_path, 0777);
			  }
		  }
	  }
	}

}

/*
 using:
 $z = new Unzip();
 $z->unzip("./bootstrap-3.3.4.zip",'./unzipres/', true, false);
*/
时间: 2024-10-11 18:15:47

PHP 解压 ZIP 文件到指定文件夹的相关文章

ubuntu解压zip文件中文乱码问题

通过unzip行命令解压,指定字符集 unzip -O CP936 xxx.zip 注:xxx.zip为需要解压的文件名 ubuntu解压zip文件中文乱码问题

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 http://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipAr

Ubuntu中解决解压zip文件中文乱码问题

1. 通过unzip行命令解压,指定字符集 unzip -O CP936 xxx.zip (用GBK, GB18030也可以) 有趣的是unzip的manual中并无这个选项的说明, unzip --help对这个参数有一行简单的说明. 2. 在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件 /etc/environment中加入2行 UNZIP="-O CP936" ZIPINFO="-O CP936"Ubuntu中解决解压zip文件中文乱码问题

Java解压ZIP、RAR文件

解压ZIP: maven地址: <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.7</version> </dependency> public static void unzipFile(String zipFileName) throws Exception { try { File f = new File(zip

python 解压 zip 文件

python 解压压缩包 使用 python 的 zipfile 模块 对同一目录下的所有 zip 文件解压,也可以指定解压文件名 import os import sys import zipfile def unzip(filename: str): try: file = zipfile.ZipFile(filename) dirname = filename.replace('.zip', '') # 如果存在与压缩包同名文件夹 提示信息并跳过 if os.path.exists(dir

android zip4j之--解压zip文件并实时显示解压进度

Zip文件是我们经常用到压缩文件格式,android中在进行网络请求大批量数据时,通常会采用传递zip文件,这样做即可以减少网络流量的消耗,加快请求的响应速度,又可以减少对存储空间的要求,所以当我们将zip文件读取回来的时候,如何解压就是一个要解决的问题,虽然java本身提供了zip相关的API,但不是很强大,所以我们采用apache开源组织的zip4j,通过这个jar包可以十分轻松的解压zip文件. 回到项目中去,项目中有个需求是从服务器请求杂志,请求回来后给读者展示,但是由于公司自己做的电子

通过javascript在网页端解压zip文件并查看压缩包内容

WEB前端解压ZIP压缩包 web前端解压zip文件有什么用: 只考虑标准浏览器的话, 服务器只要传输压缩包到客户端, 节约了带宽, 而且节约了传输时间, 听起来好像很厉害的说:     如果前端的代码很多, 而且包含大副的图片,那么就可以把js和css和jpg和png等各种数据通过服务端打包成zip传送到浏览器, 浏览器负责解压, css实用动态生成插入到dom中,js也用globalEval直接执行, jpg或者png各种图片文件由blob流转化为image, 直接插入到浏览器中: html

基于Android下载并解压Zip文件,更新UI简单帮助类

类似于:http://blog.csdn.net/jarlen/article/details/44794031 下载文件: /** * 下载文件 * * @param down_url * @param output * @param tmpDir */ private void download(String down_url, File output, File tmpDir) { InputStream inputStream = null; OutputStream outputStr

php解压zip文件

php实现解压zip文件 1 function zip($filename, $path) 2 { 3 // $filename = 'test.zip'; 4 // $path = './document/2016-05-11/test.zip'; 5 $path_all = $_SERVER['DOCUMENT_ROOT'] . sp_get_asset_upload_path(mb_substr($path, 2));//think_cmf的获取文件路劲 6 $file_name_head