• php 上传文件压缩包 running


    index.php 压缩包处理,上传文件处理
    <?php
    include('ziper.class.php');
    
    
    
    
    /*接收base64的jpg图片编码,转换为图片*/
    try {
    
        $file = $_FILES['image'];
    
    // 判断文件是否上传
        if (!is_uploaded_file($file['tmp_name'])){
            throw new Exception("没找到上传的文件");
        }
        // 上传文件
        $fileName = 'upload\\'.$file['name'];
    
        if (!move_uploaded_file($file['tmp_name'],$fileName)){
            echo "文件已上传,但是移动时出现错误";
        }
    
    
        $usezip = new Ziper();
        //$unzipDir = "./face/".date('YmdHis').mt_rand();
        $unzipDir = './temp';
        $unzipRes = $usezip->unzip($fileName, $unzipDir);//解压file.zip到文件夹dir
        if($unzipRes!==true){
            throw new Exception($unzipRes);
        }
        $dirPic = $unzipDir."/person/";
    
    
        $imgList = getImgList($dirPic);
        if (empty($imgList)) {
            throw new Exception("图片列表是空的");
        }
    
        //移动文件到指定目录
        $result = moveBatch($imgList, 10);
        if($result['success']==$result['all']){
    
            delDir($unzipDir);
        }
    
        $arr = [
            'code' => 200,
            'data' => $result,
            'msg' => 'success'
        ];
        echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    } catch (Exception $ex) {
        $error_arr = [
            'code' => 400,
            'data' => $ex->getMessage(),
            'msg' => 'error'
        ];
        echo json_encode($error_arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    }
    工具类
    <?php
    /**
     * ****************************************************************
     * 标题:Ziper类                                  
     * 作者:Gqleung                              
     * 邮箱:admin@plasf.cn                           
     * 博客:www.plasf.cn     
     *                                           
     * 描述:在PHP-ZipArchive类的基础上进行二次封装使得调用更加便捷       
     * zip方法:用于压缩文件/文件夹                                      
     * contents_to_zip方法:该方法可以在Zip文件里面写入指定文件和内容      
     * unzip方法:解压zip文件                                           
     * **************************************************************
     */
    class Ziper{
        protected $ziper;
        protected $zipfilename;
        public function __construct(){
            $this->ziper =  new ZipArchive();
        }
        /**
         * [zip description]
         * @param  string $filename     新建压缩文件的文件名,若不符合(*.zip)格式将自动添加zip后缀
         * @param  string $Fromfilename 被压缩文件/文件夹的路径
         * @return string               若错误返回错误信息,若压缩成功将返回 TRUE
         */
        public function zip($filename='',$Fromfilename){
            if (!empty($filename) && preg_match('/zip/m', $filename)){
                if(!$this->ziper->open($filename, ZipArchive::CREATE))
                    return 'File open failed';
            }elseif(!empty($filename)&& !preg_match('/zip/m', $filename)){
                $filename = $filename.'zip';
                if(!$this->ziper->open($filename, ZipArchive::CREATE))
                    return 'File open failed';
            }
            if(is_dir($Fromfilename)){
                $list_dir = scandir($Fromfilename);
                for($i=2;$i<count($list_dir);$i++){
                    if(is_dir($Fromfilename.'/'.$list_dir[$i])){
                        $this->ziper->addGlob($Fromfilename.'/'.$list_dir[$i].'/*.*', 0, array('add_path' => $Fromfilename.'/'.$list_dir[$i].'/', 'remove_path' => $Fromfilename.'/'.$list_dir[$i]));
                        $list_chr = scandir($Fromfilename.'/'.$list_dir[$i]);
                        for($j=2;$j<count($list_chr);$j++){
                            if(is_dir($Fromfilename.'/'.$list_dir[$i].'/'.$list_chr[$j])){
                                echo $list_chr[$j];
                                $this->zip('',$Fromfilename.'/'.$list_dir[$i].'/'.$list_chr[$j]);
    
                            }
                        }
                        
                    }
                }
            }else{
                        $this->ziper->addFile ($Fromfilename);
                }
            return TRUE;
            
        }
    /**
     * [contents_to_zip description]
     * @param  string $filename    压缩文件名
     * @param  string $zipfilename 需要向压缩文件写入的文件名
     * @param  string $content     写入文件的内容
     * @return string              成功返回True,否则返回错误内容
     */
        public function contents_to_zip($filename,$zipfilename,$content){
            if(!$this->ziper->open($filename, ZipArchive::CREATE))
                return 'File open failed';
            if(!$this->ziper->addFromString ($zipfilename, $content))
                return 'File write failed';
            return TRUE;
    
        }
    /**
     * [unzip description]
     * @param  string $filename 被压缩文件路径名
     * @param  string $dir      解压缩所到目录
     * @return string           返回错误原因
     */
        public function unzip($filename,$dir){
            if(!file_exists($filename))
                return 'File does not exist';
            if(!$this->ziper->open($filename))
                return 'File open failed';
            if(!is_dir($dir)){
                mkdir($dir,0775,true);
            }
    
            if(!$this->ziper->extractTo($dir))
                return 'File unzip failed';
            return TRUE;
        }
        public function __destruct() {
            $this->ziper->close();
        }
    
    }
    //验证是否是图片
    function isImage($filepath)
    {
        $imgType = array('png', 'jpg', 'jpeg');
        list($filename, $kzm) = explode('.', $filepath); //获取扩展名
        if (in_array($kzm, $imgType)) {
            return true;
        }
    }
    
    //获取图片文件列表函数
    function getImgList($dir)
    {
        $files = array();
        if (is_dir($dir)) {
            $file_dir = scandir($dir);
            foreach ($file_dir as $file) {
                if ($file == '.' || $file == '..') {
                    continue;
                } elseif (is_dir($dir . $file . '/')) {
                    $files = array_merge($files, getImgList($dir . $file . '/'));
                } else {
                    if (isImage($dir . $file) !== false) {
    
                        array_push($files, $dir . $file);
                    }
                }
            }
        }
        return $files;
    }
    
    //移动文件
    function moveBatch($pictureList, $addressId)
    {
    
        $typePath = 'face';
        $str_fileDir = sprintf("%s/%s/%s", $typePath, $addressId, date('Ymd'));
        if (!is_dir($str_fileDir)) {
            mkdir($str_fileDir, 0755, true);
        }
    
        $success = 0;
        $fail = 0;
        $all = count($pictureList);
        foreach ($pictureList as $key => $value) {
            $temp = explode("/", $value);
            $filename = array_pop($temp);
            $copyRes = copy($value, $str_fileDir . '/' . $filename);
            if ($copyRes === false) {
                $fail++;
            } else {
                unlink($value);
                $success++;
            }
        }
    
    
        return ['success' => $success, 'fail' => $fail, 'all' => $all];
    
    }
    
    //function deleteDir($dir){
    //    if(is_dir($dir)){
    //        if($dp=opendir($dir)){
    //            while (($file = readdir($dp))!=false){
    //
    //                if($file=='.'||$file=='..'){
    //                    echo $file.PHP_EOL;
    //                    continue;
    //                }
    //                $subFile=$dir."/".$file;//将目录下的文件与当前目录相连
    //                if(is_readable($subFile)&&count(scandir($subFile))==2){
    //                    echo $subFile.'111';
    //                    rmdir($subFile);
    //                }
    //                if(is_dir($subFile)){
    //                    echo $subFile.'222';
    //                    deleteDir($subFile);
    //                }
    //                if(is_file($subFile)){
    //                    echo $subFile.'333';
    //                    unlink($subFile);
    //                }
    //            }
    //            closedir($dp);
    //        }else{
    //            exit("not permission");
    //        }
    //    }else{
    //        exit("not dir");
    //    }
    //}
    function delDir($directory){//自定义函数递归的函数整个目录
    
        if(file_exists($directory)){//判断目录是否存在,如果不存在rmdir()函数会出错
    
            if($dir_handle=@opendir($directory)){//打开目录返回目录资源,并判断是否成功
    
                while($filename=readdir($dir_handle)){//遍历目录,读出目录中的文件或文件夹
    
                    if($filename!='.' && $filename!='..'){//一定要排除两个特殊的目录
    
                        $subFile=$directory."/".$filename;//将目录下的文件与当前目录相连
    
                        if(is_dir($subFile)){//如果是目录条件则成了
    
                            delDir($subFile);//递归调用自己删除子目录
    
                        }
    
                        if(is_file($subFile)){//如果是文件条件则成立
    
                            unlink($subFile);//直接删除这个文件
    
                        }
    
                    }
    
                }
    
                closedir($dir_handle);//关闭目录资源
    
                rmdir($directory);//删除空目录
    
            }
    
        }
    
    }
    ?>

    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>文件上传</title>
    </head>
    <body>
    <!-- form表单文件上传时,必须使用 enctype 属性为 multipart/form-data -->
    <form action="index.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="image">
        <p></p>
        <input type="submit" name="上传文件">
    </form>
    </body>
    </html>




  • 相关阅读:
    如何发现需求
    测试linux和window下 jdk最大能使用多大内存
    java获取汉字的拼音 简单版
    oracle一条sql执行导入sql文件
    oracle使用闪回功能恢复删除的表数据
    linux环境变量配置
    有两张表;使用SQL查询,查询所有的客户订单日期最新的前五条订单记录。 糖不苦
    jQuery作业 点击出弹框 糖不苦
    #{}和${}的区别是什么? 糖不苦
    在html页面中如何使用jQuery? 糖不苦
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/16427984.html
Copyright © 2020-2023  润新知