php zip包上传

/**
 * Notes: 人脸数据-图片的zip压缩包上传
 * Created by xxg@seabig.cn
 * DateTime: 2020-01-06 15:25
 */
public function zipUploads()
{
    $this->_globals();
    if (!$_FILES) {
        die(json_encode(array("status" => "false", "message" => "上传失败,请上传文件")));
    }
    //获取压缩包
    $file = $_FILES['file'];
    //获取文件夹名
    $name = substr($file['name'], 0, strpos($file['name'], '.'));
    //定义文件保存路径
    $filepath = _FILE_PATH . "/face/" . date("Y") . "/" . date("m") . "/" . date("d");
    //递推创建文件夹
    $this->mkpath($filepath);
    //移动文件
    $movepath = $filepath . "/" . $file['name'];
    $res = move_uploaded_file($file['tmp_name'], $movepath);
    if ($res) {
        //实例化ZipArchive类
        $zip = new ZipArchive();
        //打开压缩文件,打开成功时返回true
        if ($zip->open($filepath . "/" . $_FILES['file']['name']) === true) {
            //解压文件到获得的路径a文件夹下
            $files = $zip->extractTo($filepath);
            //关闭
            $zip->close();
            //移动文件
            $path = _FILE_PATH . "/face/" . date("Y") . "/" . date("m") . "/" . date("d") . "/" . $name;
            $arr = scandir($path);
            foreach ($arr as $val) {
                if (strlen($val) > 2) {
                    $oldfile = $filepath . "/" . $name . "/" . $val;
                    $newfile = $filepath . "/" . $val;
                    copy($oldfile, $newfile);
                }
            }
            //删除多余文件
            $this->dir($filepath . "/" . $name);
            @rmdir($filepath . "/" . $name);
            $this->dir($filepath."/__MACOSX");
            @rmdir($filepath."/__MACOSX");
            unlink($filepath . "/" . $name . ".zip"); //删除文件
            die(json_encode(array("status" => "success", "message" => "上传成功")));
        } else {
            die(json_encode(array("status" => "false", "message" => "上传失败")));
        }
    }
}

/**
 * Notes: 递归删除目录中的文件及文件夹
 * Created by jessie@seabig.cn
 * DateTime: 2020-01-06 20:16
 */
public function dir($path)
{
    //扫描一个目录内的所有目录和文件并返回数组
    $dirs = scandir($path);
    foreach ($dirs as $dir) {
        //排除目录中的当前目录(.)和上一级目录(..)
        if ($dir != '.' && $dir != '..') {
            //如果是目录则递归子目录,继续操作
            $sonDir = $path . '/' . $dir;
            if (is_dir($sonDir)) {
                //递归删除
                $this->dir($sonDir);
                //目录内的子目录和文件删除后删除空目录
                @rmdir($sonDir);
            } else {
                //如果是文件直接删除
                @unlink($sonDir);
            }
        }
    }
}

原文地址:https://www.cnblogs.com/xiangangXu1997/p/12468935.html