PHP在上传函数未免会使用到一系列的条件语句,来判断检测上传的文件,所以每次上传的时候,单独处理的话,会比较繁琐散乱,所以通常情况下需要封装成函数进行调用:
调用方法:uploadFile( $_FILES['myFile'] );
函数实现逻辑:
(1)添加默认的文件类型数组 $allowEx
(2)添加可上传文件最大字节数的限制 $maxsize
(3)获取文件扩展名
(4)获取随机不重复文件名(包括路径)
(5)判断DOWN文件夹是否存在,不存在就生成该文件夹
(6)判断错误信息
(7)判断是否为非法文件类型 in_array()
(8)判断文件的字节大小,是否超过限制的大小
(9)判断是否为一个合法的文件 getimagesize
(10)判断是否是以POST上传的文件 is_uploaded_file( $fileInfo['tmp_name'] )
(11)在指定目录下生成该上传的文件 move_uploaded_file( $fileInfo['tmp_name'] , $path )
function uploadFiles($fileInfo, $allowExt = array('gif', 'jpg', 'jpeg', 'png', 'wbmp'), $maxsize = 1048570006, $imgFlag = true)
{
$mes = '';
//判断文件是否是通过HTTP_POST上传上来的
$ext = getExt($fileInfo['name']); //获取扩展名
$filename = getUniName() . '.' . $ext; //获取随机文件名
$path = 'uploads';
//生成文件夹
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
$destination = $path . '/' . $filename; //生成文件路径
//判断上传错误信息
if ($fileInfo['error'] == UPLOAD_ERR_OK) {
//判断是否为图片(非法文件类型)
if (!in_array($ext, $allowExt)) {
exit('该文件不是图片 : 非法文件类型');
}
if ($fileInfo['size'] > $maxsize) {
exit('文件过大');
}
if ($imgFlag) {
//如何验证图片是否是一个真正的图片类型
if (!getimagesize($fileInfo['tmp_name'])) {
exit('不是合法文件');
}
}
//在指定文件夹下生成文件
if (!is_uploaded_file($fileInfo['tmp_name'])) {
exit('文件不是通过HTTP_POST文件上传的');
} else {
if (move_uploaded_file($fileInfo['tmp_name'], $destination)) {
exit('文件上传成功');
} else {
exit('文件上传失败');
}
}
}
switch ($fileInfo['error']) {
case UPLOAD_ERR_INI_SIZE:
$mes = '上传文件大小超过服务器允许上传的最大值';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$mes = '没有找不到临时文件夹';
break;
case UPLOAD_ERR_CANT_WRITE:
$mes = '文件不可写';
break;
case UPLOAD_ERR_FORM_SIZE:
$mes = '上传文件大小超过隐藏表单设置允许上传的最大值MAX_FILE_SIZE';
break;
case UPLOAD_ERR_EXTENSION:
$mes = '文件上传扩展没有打开';
break;
case UPLOAD_ERR_PARTIAL:
$mes = '文件只有部分被上传';
break;
}
return $mes;
}