第27章 PHP 文件上传原理与单文件上传实战

一、文件上传必备条件

1. 表单必须加属性: enctype="multipart/form-data" 
2. 请求方式必须为: method="post" 
3. 前端文件表单控件:  

二、PHP 接收上传文件超全局变量

 $_FILES :专门接收上传文件信息
包含5个字段:

  • name:原文件名
  • type:文件MIME类型
  • tmp_name:服务器临时存放路径
  • size:文件大小(字节)
  • error:上传错误码

三、上传错误码说明

  • 0:上传成功
  • 1:超出php.ini限制大小
  • 2:超出表单MAX_FILE_SIZE限制
  • 4:没有选择上传文件
  • 6/7:服务器目录权限不足

四、前端上传表单

html

上传

 

五、PHP 单文件上传核心代码

php

// 1. 获取上传文件信息
$file = $_FILES['upfile'];

// 2. 判断是否上传出错
if($file['error'] != 0){
exit('上传失败');
}

// 3. 定义存放目录、新文件名
$path = './upload/';
// 不存在则创建目录
if(!is_dir($path)){
mkdir($path,0777,true);
}

// 4. 获取文件后缀
$ext = pathinfo($file['name'],PATHINFO_EXTENSION);
// 生成唯一文件名,防止覆盖
$newName = time().rand(1000,9999).'.'.$ext;

// 5. 转移临时文件到正式目录
if(move_uploaded_file($file['tmp_name'],$path.$newName)){
echo '上传成功,文件地址:'.$path.$newName;
}else{
echo '文件移动失败';
}
 

六、上传基础限制校验

1. 限制文件类型(只允许图片)

php

$allow = ['jpg','png','gif','jpeg'];
if(!in_array($ext,$allow)){
exit('仅允许上传jpg/png/gif图片');
}
 

2. 限制文件大小

php

// 限制2M
$maxSize = 2 1024 1024;
if($file['size'] > $maxSize){
exit('文件不能超过2M');
}
 

七、php.ini 上传相关配置

  • file_uploads = On 开启上传
  • upload_max_filesize 单个文件最大大小
  • post_max_size POST请求最大大小
  • max_file_uploads 同时最多上传文件数

八、本章核心总结

1. 文件上传三要素:post、enctype、file控件
2. 用  $_FILES  获取上传文件信息
3. 必须用  move_uploaded_file  转移临时文件
4. 要做类型校验、大小校验、重命名防覆盖
5. 先判断error错误码,再做业务逻辑
【瓜分奖池】PHP基础第二十七章 第5张插图