ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 前端页面的表单 **** ~~~ <form action="{:url('index/index')}" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="200"> <input type="file" name="up"> <input type="submit" value="提交"> </form> ~~~ 注意:form的属性:enctype="multipart/form-data" 限制上传文件的大小name="MAX_FILE_SIZE" value="200";必须在 type="file"的前面 ***** # 配置文件 ***** 修改PHP对应版本的php.ini配置文件可以定制上传机制 | 配置 | 说明 | | --- | --- | | file_uploads | 是否允许上传文件,On开启 Off禁止上传 | | upload_tmp_dir | 文件上传过程中临时保存的目录,默认关闭状态 | | upload_max_filesize | 允许上传的最大文件大小(单个文件),可以使用K、M、G单位如2M| | post_max_size | PHP将接受的最大post数据大小,包括上传文件、表单数据。所以post_max_size要大于upload_max_filesize | | max_file_uploads | 单个请求时,允许上传的最大文件数量| # 超全局数组 ***** 上传的文件保存在 $_FILES 超全局数组中,具体参数说明如下: | 选项 | 说明 | | --- | --- | | tmp_name | 临时文件名 | | name | 上传的原始文件名 | | type | 文件MIME类型 | | error | 错误编码 | | size | 文件大小,单位字节 | 提交到后台后看云使用 $_FILES 获取到提交文件的数据如下: ~~~ ["up"] => array(5) { ["name"] => string(13) "公众号.jpg" ["type"] => string(10) "image/jpeg" ["tmp_name"] => string(22) "C:\Windows\phpEB80.tmp" ["error"] => int(0) ["size"] => int(163380) } ~~~ # 错误说明 ***** 上传出错会在 $_FILES['error'] 选项中体现,具体错误如下: | 错误 | 错误码 |说明| | --- | --- | --- | | UPLOAD_ERR_OK | 0 | 没有错误发送 | | UPLOAD_ERR_INI_SIZE | 1 | 上传的文件超过了 php.ini中 upload_max_filesize选项限制的值 | | UPLOAD_ERR_FORM_SIZE | 2 | 上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值 | | UPLOAD_ERR_PARTIAL | 3 | 文件只有部分被上传,上传中断 | | UPLOAD_ERR_NO_FILE | 4 | 没有文件被上传 | | UPLOAD_ERR_NO_TMP_DIR | 6 | 找不到临时文件夹 | | UPLOAD_ERR_CANT_WRITE | 7 | 文件写入失败 | # 上传安全 ***** 上传通过 is_uolpaded_file 和 move_uploaded_file完成,函数会检测文件是否是合法的上传文件,以保证安全 ~~~ if ($_FILES['up']['error'] > 0) { die('上传失败,请检查文件类型或大小'); } $uploadFile = 'uploads/' . time() . '.' .pathinfo($_FILES['up']['name'])['extension']; if (is_uploaded_file($_FILES['up']['tmp_name'])) { if (move_uploaded_file($_FILES['up']['tmp_name'],$uploadFile)) { die('上传成功:'.$uploadFile); } } die('上传错误'); ~~~ # 处理类 ***** 下面是支持单文件、多文件上传的处理类 ## **前台代码** ~~~ <form action="controller.php" method="post" enctype="multipart/form-data"> <input type="file" name="up"> <input type="file" name="image[]"> <input type="file" name="image[]"> <button class="btn">提交上传</button> </form> ~~~