king的园子

PHP系列(六):文件上传

0X00 文件上传

0X01 文件上传编程思路

  1. 利用html表单获取图片资源;
  2. PHP拿取上传的图片资源,判断是否存在错误号;($_FILES['file'])
  3. 设置文件大小限制,判断文件大小是否超出范围;
  4. 设置文件后缀和mime类型限制,并进行判断;(in_array)
  5. 设置上传路径,生成存储的目录;(mkdir)
  6. 设置随机的文件名,对上传的文件进行重命名;(uniqid)
  7. 判断是否为上传文件操作,如果是,进行文件重命名保存操作。(is_uploaded_file,move_uploaded_file)

0X02 错误码

从PHP 4.2.0 开始,PHP将随文件信息数组一起返回一个对应的错误代码。该代码可在文件上传时生成的文件数组中的error字段中找到。

错误码 含义
0 没有错误发生,文件上传成功。
1 上传的文件超过了php.ini中upload_max_filesize的值。
2 上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。
3 文件只有部分被上传。
4 没有文件被上传。
6 找不到临时文件。(PHP 4.3.10和PHP5.0.3引进)
7 文件写入失败。(PHP 5.1.0引进)

0X03 文件上传编程实战

<html>
	<head>
		<title>文件上传</title>
		<meta charset="utf-8" />
	</head>
	<body>
		<form action="upload.php" method="post" enctype="multipart/form-data">
			<!--限制文件大小-->	<!-- <input type="hidden" name="MAX_FILE_SIZE" value="100" /> -->
			<input type="file" name="file" />
			<input type="submit" value="上传" />
		</form>
	</body>
</html>




<?php
//var_dump($_FILES['file']);
//判断是否存在错误号
if($_FILES['file']['error'])
{
	switch($_FILES['file']['error'])
	{
		case 1:
			$str = '上传的文件超过了php.ini中upload_max_filesize的值。';
			break;
		case 2:
			$str = '上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。';
			break;
		case 3:
			$str = '文件只有部分被上传。';
			break;
		case 4:
			$str = '没有文件被上传。';
			break;
		case 6:
			$str = '找不到临时文件。';
			break;
		case 7:
			$str = '文件写入失败。';
			break;
	}
	echo $str;
	exit;
}

//判断文件大小是否超出允许范围
if($_FILES['file']['size'] > (pow(1024,2)*2))
{
	exit('抱歉,你的文件大小超过了2M,请重新选择!');
}

//判断文件后缀和mime类型是否在允许范围
$allowMime = ['image/png','image/jpg','image/jpeg','image/gif','image/wbmp'];
$allowFix = ['png','jpg','jpeg','gif','wbmp'];

$fileInfo = pathinfo($_FILES['file']['name']);		//获取文件名信息
$file_Fix = $fileInfo['extension'];

if(!in_array($file_Fix,$allowFix))
{
	exit('抱歉,您的文件格式不允许,请重新选择!');
}

if(!in_array($_FILES['file']['type'],$allowMime))
{
	exit('抱歉,您的文件格式不允许,请重新上传');
}

//设置上传路径
$path = 'upload';
if(!file_exists($path))
{
	mkdir($path);
}

//文件名随机
$name = uniqid().'.'.$file_Fix;

//判断是否为上传文件
if(is_uploaded_file($_FILES['file']['tmp_name']))
{
	if(move_uploaded_file($_FILES['file']['tmp_name'],$path.'/'.$name))
	{
		echo '文件上传成功!';
	}
	else
	{
		exit('文件移动失败!');
	}
}
else
{
	exit('抱歉,您当前非上传文件操作!');
}

?>
posted @ 2020-02-29 13:40  _元歌  阅读(175)  评论(0)    收藏  举报