文件上传原理
- 将文件从浏览器传到服务器端
- 用form表单像服务器发送数据
- method的属性必须是POST
- enctype的属性必须是multipart/form-data
- <input type=‘file’ name=>
超全局变量数组$_FILES
数组返回5个键值对
- name=>上传文件的源名称
- type=>文件类型
- tmp_name=>上床文件数据临时存放位置
- error=>上传过程中是否有错误发生
- size=>上传文件大小
上传文件错误代码
错误代码 | 含义 |
---|---|
0 | 没有错误发生,文件山风吹成功 |
1 | 上传文件朝服哦php.ini中upload_max_filesize选项限制的值 |
2 | 上传文件大小超过了指定值 |
3 | 文件只有部分被上传 |
4 | 没有文件被上传 |
6 | 找不到临时文件夹 |
7 | 文件写入失败 |
单个文件上传
HTML表单部分
<form method="POST" action="upload.php" enctype="multipart/form-data">
选择上传文件<input type="file" name="upload">
<input type="submit">
<input type="hidden" name="token" value="upload">
</form>
这里需要一个hidden 的隐藏元素,防止客户端直接从地址栏访问php部分
<?php
if(isset($_POST["token"])&&$_POST['token']=='upload')
{
if($_FILES['upload']['error']==0)
{
if($_FILES['upload']['size']>2*1024*1024)
{
echo "<h2>文件大小超过2M</h2>";
die();
}
//获取文件后缀
$ext = pathinfo($_FILES['upload']['name'],PATHINFO_EXTENSION);
//临时文件
$temp = $_FILES['upload']['tmp_name'];
$dest = "./upload/".uniqid().".".$ext;
//将临时文件移动到upload目录中
move_uploaded_file($temp,$dest);
echo"<h2>文件上传成功</h2>";
die();
}
}
else
{
echo "<h2>未选择文件</h2>";
}
多个文件上传
HTML表单部分
<form method="POST" action="uploads.php" enctype="multipart/form-data">
<input type="file" name="uploads[]">
<input type="file" name="uploads[]">
<input type="file" name="uploads[]">
<input type="submit">
<input type="hidden" name="token" value="uploads">
</form>
<?php
if(isset($_POST["token"])&&$_POST['token']=='uploads')
{
$arr = $_FILES['uploads'];
foreach($arr['name'] as $key=>$name)
{
if($name!="")
{
$ext = pathinfo($name,PATHINFO_EXTENSION);
$temp = $arr['tmp_name'][$key];
$dest = "./upload/".uniqid().".".$ext;
move_uploaded_file($temp,$dest);
}
}
}
else
{
echo "<h2>未选择文件</h2>";
}