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);


 

posted @ 2015-08-04 21:39  风烨漾  阅读(170)  评论(0编辑  收藏  举报