代码如下:
<?php
header("Content-type: text/html; charset=utf8");
/**
* 函数名:upload
* 描述:文件上传
* @param array $file 上传文件的信息
* @param array $allow 文件上传的类型
* @param string $path 文件上传的路径
* @param int $maxsize = 2*1024*1024 允许上传的文件的大小
* @return false|$newname 如果上传失败就返回false,成功则返回文件的新名字
*/
function upload($file,$allow,$path,$maxsize=2097152){
$res = array('code'=>1,'msg' => '上传成功!','data'=>[]);
// 判断系统错误
switch ($file['error']) {
case 1:
$res['code'] = 0;
$res['msg'] = '上传错误,超出了文件限制的大小!';
return $res;
case 2:
$res['code'] = 0;
$res['msg'] = '上传错误,超出了表单允许的大小!';
return $res;
case 3:
$res['code'] = 0;
$res['msg'] = '上传错误,文件上传不完整!';
return $res;
case 4:
$res['code'] = 0;
$res['msg'] = '请先选择要上传的文件!';
return $res;
case 6:
case 7:
$res['code'] = 0;
$res['msg'] = '对不起,服务器繁忙,请稍后再试!';
return $res;
}
// 判断文件大小
if ($file['size'] > $maxsize) {
$res['code'] = 0;
$res['msg'] = '超出文件大小,允许的最大值为:'. $maxsize . '字节';
return $res;
}
// 判断文件类型 image/png
if (!in_array($file['type'], $allow)) {
// 文件类型非法
$res['code'] = 0;
$res['msg'] = '上传的文件类型不正确,允许的类型有:' . implode(',', $allow);
return $res;
}
// 得到文件的新名字
$newname = randName($file['name']);
// 移动临时文件到指定路径
$target = $path . '/' . $newname;
if (move_uploaded_file($file['tmp_name'], $target)) {
$res['data'] = $newname;
return $res;
}else {
$res['code'] = 0;
$res['msg'] = '发生未知错误,上传失败!';
return $res;
}
}
/**
* 函数名:randName
* 描述:定义一个产生随机名字的函数
* @param string $filename 文件的旧名字
* @param string $newname 文件的新名字
*/
function randName($filename) {
// 生成文件名的时间部分
$newname = date('YmdHis');
// 加上随机的六位数
$str = '0456789';
// 得到六位随机数
for ($i=0; $i < 6; $i++) {
// 将每次得到的随机数加到新名字后
$index = mt_rand(0,strlen($str));
$index = $index <= 0 ? 0 : $index -1;
$newname .= $str[$index];
}
// 加上后缀名
$newname .= strrchr($filename, '.');
return $newname;
}
// 获取上传文件
$file = $_FILES["uploadfile"];
// 允许上传的类型
$allowArr = array('image/png','image/jpeg');
// 上传到当前目前下
$path = '.';
// 调用上传方法
$uploadRes = upload($file,$allowArr,$path);
var_dump($uploadRes);
运行成功结果如下:
运行失败结果如下: