php文件上传功能 , 单文件和多文件

PHP 文件上传功能 这其中需要先知道这些函数(方法)的作用 

$_FILES[]    //用来接收文件信息
is_dir()     //判断一个目录是否存在
mkdir()      //创建目录
time()       //获取当前时间戳
in_array()   //判断一个元素在不在一个数组内
rand()/mt_rand()    //取随机数
move_uploaded_file(a,b)    // 将A文件移动到B文件

单文件上传 (注释已经写得很清楚了 认真读不难理解) 

HTML部分




	文件上传功能
	


	

单文件

php文件上传功能 , 单文件和多文件_第1张图片

 upload.php :

"成功,没有错误",
	1=>"上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。",
	2=>"上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。",
	4=>"文件有部分没有上传",
	5=>"文件没有被上传",
	6=>"找不到临时文件夹",
	7=>"文件写入失败"
];
// 定义文件类型 没有则去掉下面判断文件类型的一层if 
$filesType = array("image/jpeg","image/jpg","image/png","image/gif","image/pjpeg","image/x-png");

// 规定文件上传大小 单位 (MB) , 为 0 则不限制大小
$size = 4;
// 接受传进来的文件数据
$file = $_FILES['tu1'];

// 定义文件上传路径
$path = "testUpload/";
// 获取目录名称
$path1 = rtrim($path,"/");
if(!is_dir($path1)){ // 判断上传目录是否存在 , 不存在则自动创建
	mkdir($path1,"0777");
}
// 空数组 用来存储信息
$info = [];
$info['isok'] = false;

if($file['error'] > 0){ // 判断文件上传是否出错
	$info['msg'] = $errorMeg[$file['error']];
}else{
	if(!in_array($file['type'],$filesType)){  //判断文件格式是否正确
		$info['msg'] = "文件格式不正确!";
	}else{
		if(($file['size']/1024/1024) > $size){ //判断文件大小是否符合
			$info['msg'] = "文件限定大小为"."(".$size."MB)";
		}else{ 
			// 开始上传文件
			// 定义文件名 时间戳+随机数+文件名 , 这样写文件名一般不会重复,所以下面就不用判断文件名是否重复了
			$fileName = time().mt_rand(0,99999).$file['name'];
			
			// 保存文件
			if(move_uploaded_file($file['tmp_name'],$path1."/".$fileName)){
				$info['isok'] = true;
				$info['msg'] = "文件上传成功!";
			}else{
				$info['msg'] = "文件保存失败! 请查看目录是否有权限等问题!";
			}
		}
	}
}
var_dump($info);  //打印上传结果

php文件上传功能 , 单文件和多文件_第2张图片

 

php文件上传功能 , 单文件和多文件_第3张图片

为了方便 将上面的代码封装成一个方法方便以后调用

function uploadFile($path,$size=0,$fileType=[]){
	// 文件上传错误码信息
	$errorMsg = [
		0=>"成功,没有错误",
		1=>"上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。",
		2=>"上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。",
		4=>"文件有部分没有上传",
		5=>"文件没有被上传",
		6=>"找不到临时文件夹",
		7=>"文件写入失败"
	];
	// 接受传进来的文件数据
	$file = $_FILES['tu1'];
	// info用来存储信息
	$info['isok'] = false;

	// 判断文件上传是否出错
	if($file['error'] > 0){
		$info['msg'] = $errorMsg[$file['error']];
		return $info;  // return 之后便不会执行下面代码
	}

	// 判断是否限制大小
	if($size != 0){
		if(($file['size']/1024/1024) > $size){
			$info['msg'] = "文件过大(文件大小限制为".$size."MB)";
			return $info;
		}
	}

	// 判断是否限制类型
	if(!empty($fileType)){
		if(!in_array($file['type'],$fileType)){
			$info['msg'] = "文件类型错误";
			return $info;
		}
	}

	// 开始上传文件
	$path1 = rtrim($path,"/");
	// 创建目录
	if(!is_dir($path1)){
		mkdir($path1,"0777");
	}
	// 定义文件名
	$fileName = time().mt_rand(0,99999).$file['name'];
	// 保存文件
	if(move_uploaded_file($file['tmp_name'],$path1."/".$fileName)){
		$info['msg'] = "文件上传成功!";
		$info['isok'] = true;
		return $info;
	}else{
		$info['msg'] = "文件保存失败";
		return $info;
	}

}

$path = "111111";
var_dump(uploadFile($path));

接下来是多文件上传的实现

HTML部分: (要注意的是 type ="file" 这个input中要加入 multipe 才可以哦)




	文件上传功能
	



	

多文件

php文件上传功能 , 单文件和多文件_第4张图片

upload2.php: (就不转换成方法了 , 有兴趣的各位自己试一下 , 其实也是多了个foreach)

"成功,没有错误",
	1=>"上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。",
	2=>"上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。",
	4=>"文件有部分没有上传",
	5=>"文件没有被上传",
	6=>"找不到临时文件夹",
	7=>"文件写入失败"
];
// 定义文件类型 没有则去掉下面判断文件类型的一层if 
$filesType = array("image/jpeg","image/jpg","image/png","image/gif","image/pjpeg","image/x-png");

// 规定文件上传大小 单位 (MB) , 为 0 则不限制大小
$size = 4;
// 接受传进来的文件数据
$file = $_FILES['tu1'];

// 定义文件上传路径
$path = "testUpload/";
// 获取目录名称
$path1 = rtrim($path,"/");
if(!is_dir($path1)){ // 判断上传目录是否存在 , 不存在则自动创建
	mkdir($path1,"0777");
}
// 空数组 用来存储信息
$info = [];
$info['isok'] = false;
$files = $_FILES['tu1'];
// 随便循环一个 ----- name , tmp_name , size , error 都行 主要是用 key
foreach($files['name'] as $key => $v){
	if($files['error'][$key] > 0){ // 判断文件上传是否出错
		$info['msg'] = $errorMeg[$files['error'][$key]];
	}else{
		if(!in_array($files['type'][$key],$filesType)){  //判断文件格式是否正确
			$info['msg'] = "文件格式不正确!";
		}else{
			if(($files['size'][$key]/1024/1024) > $size){ //判断文件大小是否符合
				$info['msg'] = "文件限定大小为"."(".$size."MB)";
			}else{ 
				// 开始上传文件
				// 定义文件名 时间戳+随机数+文件名 , 这样写文件名一般不会重复,所以下面就不用判断文件名是否重复了
				$fileName = time().mt_rand(0,99999).$files['name'][$key];
				
				// 保存文件
				if(move_uploaded_file($files['tmp_name'][$key],$path1."/".$fileName)){
					$info['isok'] = true;
					$info['msg'] = "文件上传成功!";
				}else{
					$info['msg'] = "文件保存失败! 请查看目录是否有权限等问题!";
				}
			}
		}
	}
	var_dump($info);
}


php文件上传功能 , 单文件和多文件_第5张图片

php文件上传功能 , 单文件和多文件_第6张图片

 

当然 多文件上传有几种方式 我这只是其中一种 , 原理都差不多

多多实践 收益多多

你可能感兴趣的:(PHP)