zoukankan      html  css  js  c++  java
  • PHP 文件的相关操作

    转换字节大小

    /**
     * 转换字节大小
     * @param number $size
     * @return string
     */
    function transByte($size,$dec=2)
    {
    //Byte,KB,MB,GB,TB,EB
        $arr=array('B','KB','MB','GB','TB','EB');
        $i=0;
        while($size>=1024){
            $size=$size/1024;
            $i++;
        }
        return round($size,$dec).$arr[$i];
    }

    创建文件

    /**
     * 创建文件
     * @param string $filename
     * @return string
     */
    function createFile($filename){
        //验证文件名的合法性,是否包含 /,*,<>,?,|
        $pattern='/[*,/,*,<>,?|]/';
        if(!preg_match($pattern,basename($filename))){
            //检测当前目录下是否存在同名文件
            if(!file_exists($filename)){
                //通过touch($filename)来创建
                if(touch($filename)){
                    return "文件创建成功";
                }else{
                    return "文件创建失败";
                }
            }else{
                return "文件已存在,请重命名后创建";
            }
        }else{
            return "非法文件名";
        }
    }

    检测文件命名,是一个常用的方法,

    function checkFilename($filename){
        $pattern='/[*,/,*,<>,?|]/';
        if(preg_match($pattern,basename($filename))){
            return false;
        }else{
            return true;
        }
    }

    重命名文件

    /**
     * 重命名文件
     * @param $oldname
     * @param $newname
     * @return string
     */
    function renameFile($oldname,$newname){
        //验证文件名合法性
        if(checkFilename($newname)){
            //检测当前目录下是否存在同名文件
            $path=dirname($oldname);
            if(!file_exists($path.'/'.$newname)){
                //进行重命名
                if(rename($oldname,$path.'/'.$newname)){
                    return "重命名成功";
                }else{
                    return "重命名失败";
                }
            }else{
                return "存在同名文件,请重新命名";
            }
        }else{
            return "非法文件名";
        }
    }

    复制文件

    /**
     * 复制文件
     * @param $filename
     * @param $dstname
     * @return string
     */
    function copyFile($filename,$dstname){
        if(file_exists($dstname)){
            if(!file_exists($dstname.'/'.basename($filename))){
                if(copy($filename,$dstname.'/'.basename($filename))){
                    $mes='文件复制成功';
                }else{
                    $mes='文件复制失败';
                }
            }else{
                $mes='存在同名文件';
            }
        }else{
            $mes='目标目录不存在';
        }
        return $mes;
    }

    剪切文件

    /**
     * 剪切文件
     * @param $filename
     * @param $dstname
     */
    function cutFile($filename,$dstname){
        if(file_exists($dstname)){
            if(!file_exists($dstname.'/'.basename($filename))){
                if(rename($filename,$dstname.'/'.basename($filename))){
                    $mes='文件剪切成功';
                }else{
                    $mes='文件剪切失败';
                }
            }else{
                $mes='存在同名文件';
            }
        }else{
            $mes='目标目录不存在';
        }
    }

    删除文件

    /**
     * 删除文件
     * @param $filename
     * @return string
     */
    function delFile($filename){
        if(unlink($filename)){
            $mes='文件删除成功';
        }else{
            $mes='文件删除失败';
        }
        return $mes;
    }

    下载文件

    /**
     * 下载文件
     * @param $filename
     */
    function downFile($filename){
        header("content-disposition:attachment;filename=".basename($filename));
        header("content-length:".filesize($filename));
        readfile($filename);
    }

    上传文件,及多文件

    /**
     * 构建文件上传信息
     * @return mixed
     */
    function getFiles(){
        $i=0;
        foreach($_FILES as $file){
            if(is_string($file['name'])){
                $files[$i]=$file;
                $i++;
            }elseif(is_array($file['name'])){
                foreach($file['name'] as $key=>$val){
                    $files[$i]['name']=$file['name'][$key];
                    $files[$i]['type']=$file['type'][$key];
                    $files[$i]['tmp_name']=$file['tmp_name'][$key];
                    $files[$i]['error']=$file['error'][$key];
                    $files[$i]['size']=$file['size'][$key];
                    $i++;
                }
            }
        }
        return $files;
    
    }
    /**
     * 针对单文件,多个单文件,多文件的上传
     * @param $fileInfo
     * @param string $path
     * @param array $allowExt
     * @param int $maxSize
     * @param bool|true $flag
     * @return array
     */
    function uploadFile($fileInfo,$path='./uploads',$allowExt=array('jpg','png','gif','jpeg'),$maxSize=10097152,$flag=true){
        $res=array();
        if($fileInfo['error']==UPLOAD_ERR_OK){
            //常用的集中检验方法
            if($fileInfo['size']>$maxSize){
                $res['mes']=$fileInfo['name'].'上传的文件过大';
            }
            $ext=strtolower(pathinfo($fileInfo['name'],PATHINFO_EXTENSION));
            if(!in_array($ext,$allowExt)){
                $res['mes']=$fileInfo['name'].'上传的文件类型不符合';
            }
            //检测是否为图片
            if($flag){
                if(!getimagesize($fileInfo['tmp_name'])){
                    $res['mes']=$fileInfo['name'].'不是真实图片类型';
                }
            }
            if(!is_uploaded_file($fileInfo['tmp_name'])){
                $res['mes']=$fileInfo['name'].'文件不是通过HTTP POST方式上传上来的';
            }
            if($res) return $res;
            //创建文件夹
            if(!file_exists($path)){
                mkdir($path,0777,true);
            }
            $uniName=substr(md5(uniqid(microtime(true),true)),0,5);
            $destination=$path.'/'.$uniName.'.'.$ext;
            if(!move_uploaded_file($fileInfo['tmp_name'],$destination)){
                $res['mes']='文件移动失败';
            }
            $res['mes']=$fileInfo['name'].'上传成功';
            $res['destination']=$destination;
            return $res;
        }else{
            switch($fileInfo['error']){
                case 1:
                    $res['mes']='上传文件超过了PHP配置文件中upload_max_filesize选项的值';
                    break;
                case 2:
                    $res['mes']='超过了表单MAX_FILE_SIZE设置的大小';
                    break;
                case 3:
                    $res['mes']='文件部分被上传';
                    break;
                case 4:
                    $res['mes']='没有选择上传文件';
                    break;
                case 6:
                    $res['mes']='没有找到临时目录';
                    break;
                case 7:
                case 8:
                    $res['mes']='系统错误';
                    break;
            }
            return $res;
        }
    }

    调用时需要进行遍历:
    $files=getFiles();
    foreach($files as $fileInfo){
    $res=uploadFile($fileInfo,$path);
    $mes=$res['mes'].'<br>';
    alertMes($mes,$redirect);
    @$uploadFiles[]=$res['destination'];
    }
    $uploadFiles=array_values(array_filter($uploadFiles));
    print_r($uploadFiles);


  • 相关阅读:
    JSON
    什么是Jsonp?
    用border做三角形
    前端模块化
    Web 前端
    前端性能优化
    Ajax的原理
    node.js基础语法
    【真·新手初篇】菜鸟们都戳进来看看(欢迎大神指导)
    2019.11.20 开启一天的工作
  • 原文地址:https://www.cnblogs.com/fengyeyang/p/4703211.html
Copyright © 2011-2022 走看看