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