PHP系列(六):文件上传
0X00 文件上传
0X01 文件上传编程思路
- 利用html表单获取图片资源;
- PHP拿取上传的图片资源,判断是否存在错误号;($_FILES['file'])
- 设置文件大小限制,判断文件大小是否超出范围;
- 设置文件后缀和mime类型限制,并进行判断;(in_array)
- 设置上传路径,生成存储的目录;(mkdir)
- 设置随机的文件名,对上传的文件进行重命名;(uniqid)
- 判断是否为上传文件操作,如果是,进行文件重命名保存操作。(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('抱歉,您当前非上传文件操作!');
}
?>
大扎好,我是基于搜索引擎的安全咸鱼工程师,欢迎关注!
么!!!

浙公网安备 33010602011771号