PHP文件上传函数封装
<?php
function uploadFile( $fileInfo, $uploadPath = './attachment', $flag = true, $allowExt = ['jpg', 'png', 'wbmp', 'gif', 'jpeg', 'bmp'], $maxSize = 2097152 ) {
if ( $fileInfo['error'] == 0 ) {
$arr = explode( '.', $fileInfo['name'] );
//explode 分割字符串,以.点分割
$ext = end( $arr );
//取后缀名
$prefix = array_shift( $arr );
//取文件名
if ( !in_array( $ext, $allowExt ) ) {
//判断后缀是否存在
return $res = '文件类型不合法';
}
if ( $fileInfo['size'] > $maxSize ) {
//判断文件大小
return $res = '文件大小超过限制的最大值';
}
if ( !getimageSize( $fileInfo['tmp_name'] ) ) {
//检测图片是否合法
return $res = '请勿上传非法图片';
}
if ( !is_uploaded_file( $fileInfo['tmp_name'] ) ) {
//检测上传方式是否为http post
return $res = '上传方式错误:请使用http post 方式上传';
}
//定义存储文件目录, 按年月规类存放
$uploadPath = $uploadPath . '/' . date( 'Y' ) . '/' . date( 'm' ) ;
if ( !file_exists( $uploadPath ) ) {
//file_exists判断目录是否存在
mkdir( $uploadPath, 0770, true );
//mkdir创建目录,参数0770为权限
chmod( $uploadPath, 0770 );
//为以防万一,再次修改权限为0770
}
$des = $uploadPath . '/'.md5( $prefix.time() ).'.'.$ext;
//将散列后的文件名,与后缀拼接。( $prefix.time()拼接为原文件名+时间戳,md5 在将其散列形成独一无二的文件名,避免用户上传相同文件名的文件导致出现问题 )
// echo $des;
//调试用
$moveResult = move_uploaded_file( $fileInfo['tmp_name'], $des );
//参数:将$fileInfo['tmp_name']临时文件,复制到$des,
if ( !$moveResult ) {
$res['error'] = '文件移动失败';
} else {
$res['info'] = $fileInfo['name'] . '上传成功';
$res['fileRealPath'] = $des;
}
return $res;
} else {
switch( $fileInfo['error'] ):
case 1:
echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
break;
case 2:
echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
break;
case 3:
echo '文件只有部分被上传';
break;
case 4:
echo '没有文件被上传。 是指表单的file域没有内容,是空字符串';
break;
case 6:
echo '找不到临时文件夹';
break;
default:
echo '系统错误';
endswitch;
}
}
上传表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>文件上传</title>
</head>
<body>
<form
action="upload/uploads.php"
method="post"
enctype="multipart/form-data"
>
<fieldset>
<legend>文件上传</legend>
<label for="my_file"></label>
<input type="file" name="my_file" id="my_file" />
<button>上传</button>
</fieldset>
</form>
</body>
</html>
成功上传文件,并按年/月分类存放