php文件上传值函数封装

笔记
函数的功能
上传文件
条件
进行判断a
1.文件类型?
2.文件存储到什么位置?
3.文件格式限制?后缀名
4.文件大小限制?
结果:实现文件上传
1.结构能够看到(记录文件路径和名字都要返回)
2.失败?返回false,显示错误原因



开始实现:
1.获取文件五元素,分别传入函数中

2.先判断文件是否有效(数组,error值为0)

3.判断保存路径是否有效(is_dir(路径))

4.判断文件上传的过程中是否有错误
(error,error中有许多返回值,使用switch来判断)

5.判断MIME类型中type(in_array(要查的东西,在哪里查))

6.文件格式,就是后缀名字
(strrchr(取末尾),例如(.php,.jpg)
 使用ltrim('.PHP','.')取消左边的. 
     rtrim()取消右边的
 再判断后缀名是否在文件上传的文件名里
 不允许为空empty()
)

7.文件大小处理
大于最大文件大小

8.移动到指定目录
判断是否为临时上传文件然后在移动
(is_uploaded_file
 move_uloaded_file
)

9.命名冲突处理:上传同名文件?中文??
构造一个文件名字
类型_年月日+随机数字+随机数
strstr(字符串,'要找的字符',true)
date('yyyymmdd')
随机字符串
mt_rand(1,2)
chr(一个二进制)转换为对应的字符

对应的html使用POST的上传

<html>
<head></head>
<body>
<form method="POST" enctype="multipart/form-data" action="03.php">
	<input type="file" name="image"/><br/>
	<input type="submit" name="sub" value="件上传"/>
</form>
</body>
</html>


//以下代码是用来逐步进行判断
Array ( 
[image] => Array ( 

[name] => 无标题.jpg 

[type] => image/jpeg 

[tmp_name] => C:\Temp\php5FFE.tmp 

[error] => 0 

[size] => 12435 

) 
)

下面是01.php,这是跟着视频做的还有一个03.php是一边想着一边做的

<?php
//单文件
header('Content_type:text/html;charset=utf-8');

function upload_single($file,$allow_type,$path,&$error,$allow_format=array(),$max_size=2000000){
	//先判断文件是否有效
	if(!is_array($file) || !isset($file['error']) ){
		$error='不是一个有效的上传文件';
		return false;
	}
	//文件存储的位置
	if(!is_dir($path)){
		echo "文件位置错误";
		return false;
	}
	//文件上传过程中是否有错误
	switch($file['error']){
		case 1:
		case 2:
		     $error='文件超出服务器大小';
		     return false;
		case 3:
		     $error='文件上传过程中出现问题';
		     return false;
		case 4:
		     $error='没有选中需要上传文件';
		case 6:
		case 7:
		     $error='文件保存失败';
		     return fales;
	}
	//判断MIME类型中type
	if(!in_array($file['type'],$allow_type)){
		$error='当前文件类型不允许上传';
		return false;
	}
	//判断文件格式
	$ext=ltrim(strrchr($file['name'],'.'),'.');
	if(!empty($allow_format) && !in_array($ext,$allow_format)){
		$error='当前文件格式不允许上传';
		return false;
	}
	//判断文件大小是否满足当前允许的大小
	if($file['size'] > $max_size){
		$error='文件最大大小为:'.$max_size.'字节';
	}
	//构造文件名:类型_年月日+随机字符.ext
	//TRUE是前半部分,false是后半部分
	$fullname=strstr($file['type'],'/',TRUE).date('YYYYmmdd');
	//产生随机字符串
	//chr()二进制转字符串
	for($i=0;$i<4;$i++){
		//随机数转成字符放到最后
		$fullname .= chr(mt_rand(65,90));
	}
	//添加后缀
	$fullname .= '.'.$ext;
	//移动指定目录
	if(is_uploaded_file($file['tmp_name'])){
		if(move_uploaded_file($file['tmp_name'], 'upload/'.$file['name'])){
			return '文件:'.$fullname.'上传成功';
		}else{
			$error='移动失败';
			return false;
		}
	}else{
		$error='不是上传文件!';
		return false;
	}
}

$file=$_FILES['image'];
$path='upload';
$allow_type=array('image/jpg','image/jpeg');
$allow_format=array('jpg','jpeg');
$max_size=8000000;

if($filename= upload_single($file,$allow_type,$path,$error,$allow_format,$max_size)){
	echo $filename;
}else{
	echo $error;
}
?>

03.php很多的注释

<?php
/*
判断是不是空文件,有效文件 $file
判断类型是不是我们允许上传的类型 $type
判断位置,文件存放的位置是不是存在 $path
判断error这个返回值是多少 &$error
判断后缀 $ext
判断文件大小 $max_size
*/
function uploadset($file,$type,$path,&$error,$ext=array(),$max_size=20000){
	//查看文件是否为空或者上传有误
	if(!isset($file['error']) || !is_array($file)){
		$error='不是有效文件';
		return false;
	}
	//判断文件路径
	if(is_dir($path)){
		$error='文件路径有误';
		return false;
	}
	//判断返回值error
	switch ($error){
		case 1:
		case 2:
		     $error='文件大小超出服务器';
		     return false;
		case 3:
		     $error='上传过程有误';
		     return false;
		case 4:
		     $error='没有选择文件';
		     return false;
		case 6:
		case 7:
		     $error='文件保存失败';
		     return false;
	}
	//判断上传类型type
	if(!in_array($file['type'],$type)){
		$error='不是有效类型';
		return false;
	}
	//判断后缀$ext
	//$i_ext=strrchr($file['name'],'.');//结果是从.开始获取(.xxx)
	//$i_ext=ltrim($i_ext,'.');//从左侧删除'.' 结果为xxx
	$i_ext=ltrim(strrchr($file['name'], '.'),'.');
	//开始判断,上传的后缀名是不是在允许的数组里面 并且 判断是不是空的
	if(!in_array($i_ext,$ext) && !empty($i_ext)){
		$error='后缀名不合法';
		return false;
	}
	//判断大小
	//使用实际的图片文件大小与允许的大小比较
	if($file['size'] > $max_size){
		$error='文件大小不合法';
		return false;
	}

	//以上,完成了文件五大元素的判断
	//通过的,都是没问题的可以进行文件移动
	//可以进行文件名称的构造
	//类型_年月日+随机字符.ext
	//strstr(要截取的字符,从哪个字符开始,true是从第二个参数的前半段)
	//获取了image/jpg中的前半段image
	$newname=strstr($file['type'],'/',TRUE).date('YYYYmmdd');
	//在后面添加随机字符
	for($i=0;$i<4;$i++){//循环四次添加四个随机字符
		$newname .= chr(mt_rand(65,90));//chr(二进制数字转换对应的字母)
		//mt_rand(开始范围,结束范围)
	}
	//添加后缀
	$newname .= '.'.$i_ext;
	//文件移动
	if(is_uploaded_file($file['tmp_name'])){
		if(move_uploaded_file($file['tmp_name'],'upload/'.$file['name'])){
			return '文件'.$newname.'移动成功';
		}else{
			$error= '移动失败';
			return false;
		}
	}else{
		$error= '上传失败!';
		return false;
	}

}

$file=$_FILES['image'];
$path='upload';
$allow_type=array('image/jpg','image/jpeg');
$allow_format=array('jpg','jpeg');
$max_size=8000000;

if($filename= uploadset($file,$type,$path,$error,$ext,$max_size)){
	echo $filename;
}else{
	echo $error;
}
?>

猜你喜欢

转载自blog.csdn.net/Lonelyhat/article/details/92201768