PHP文件上传-单文件上传函数思路

单文件上传思路
----------------------------------------
1.需要一个上传文件的表单页面
	表单页面需要设置POST方式提交 method="POST",并设置以附件类型上传
	enctype="multipart/form-data"

	表单中需要一个文件域
	<input type="file" name="file" >
		type="file"  说明是文件域
		name="file"  用于接收上传文件


2.需要一个上传函数
	①首先需要把上传的文件信息传递到函数中
		$file = $_FILES['file']
		
		function uploadFile($file){
		
		}

	②需要对上传的文件进行判断
	
		function uploadFile($file,$path,$allowType=array(),$maxSize=0){
			// a.需要一个变量接收文件的判断信息
			$info = array(
				'isok' => false,	// 存储上传文件的状态,默认是没有上传成功
				'message' => ''		// 用于存放文件上传的提示信息,失败时提示错误信息,成功时提示文件名,用于后期添加文件路径到数据库
			);
			
			// b.首先要判断文件是否上传成功,通过文件上传信息中的错误号进行判断
			if($file['error']>0){	// 如果错误号大于0,表名上传的文件有问题
				switch($file['error']){
					case 1:
						$info['message'] = "文件大小超出PHP的限制";	// 修改错误提示信息
					break;
					...
					...
				}
				
				// 判断完错误信息之后,返回给用户看
				return $info;
			}
			
			// c.如果文件上传没有出错,那么对文件做其它方面的限制
			// 限制文件上传的类型,此时需要为函数提供一个参数,用于说明可以上传那些类型的文件
			// $allowType = array()	// 默认是一个空数组,下面进行默认设置
			if(empty($allowType)){	// 如果用户没有指定上传的类型,则使用默认值
				$allowType = array('image/jpeg','image/png','image/gif');	// 默认只允许上传图片类型
			}
			
			// 验证是否符合类型要求
			if(!in_array($file['type'],$allowType)){
				// 如果上传的类型不符合要求,则不继续进行上传操作
				$info['message'] = '上传类型不符合要求';
				return $info;
			}
			
			// 接下来需要验证文件大小是否超出限制,所以此时需要指定一个参数用于设置文件大小
			// $maxSize = 0	// 默认不限制文件大小
			if($maxSize && $file['size']>$maxSize){
				// 如果用户设置了文件大小,并且上传的文件超过设置的大小,则上传失败
				$info['message'] = '上传的文件超出限制';
				return $info;
			}
			
			// d.走到这一步说明前面的基本信息验证通过
			// 此时需要判断文件是否是通过合法的途径进行上传的
			if(is_uploaded_file($file['tmp_name'])){	// 简单的可以理解为服务器上是否存在临时文件
				// 接下来就是设置文件上传目录了,需要指定一个上传目录参数,$path
				// 对目录进行处理
				$path = rtrim($path,'/').'/';
				// 获取文件的后缀名
				$suffix = pathinfo($file['name'],PATHINFO_EXTENSION);
				
				// 设置随机的文件名,为了防止出现相同的文件名,需要进行一次判断
				do{
					$randName = date("YmdHis").mt_rand(1000,9999).'.'.$suffix;
				}while(file_exists($path.$randName));
				
				// 路径及文件名都设置好之后就可以移动文件了
				if(move_uploaded_file($file['tmp_name'],$path.$randName)){
					// 文件上传成功
					$info['isok'] = true;	// 修改文件上传状态标志
					$info['message'] = $path.$randName;
					return $info;
				} else {
					// 移动失败
					$info['message'] = '文件移动失败';
					return $info;
				}
			} else {
				// 不是通过HTTP POST方式提交的文件
				$info['error'] = '请使用HTTP POST方式上传文件';
				return $info;
			}
		}
		
3.点击提交后需要对上传的文件进行处理
	①接收上传的文件信息
		$file = $_FILES['file'];
		
	②引入上传函数
		include('./functions.php');
	
	③设置文件保存路径
		$path = './uploads/';	// 此目录需要手动创建
		
	④调用文件上传函数
		$info = uploadFile($file,$path);
		
	⑤判断上传状态
		if($info['isok']){
			echo '上传成功'.$info['message'];
		} else {
			echo '上传失败'.$info['message'];
		}




转载于:https://my.oschina.net/mpf/blog/610070

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值