第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错误码,再做业务逻辑

请登录后发表评论
注册
停留在世界边缘,与之惜别