ThinkPHP文件上传接口如何实现高效安全的文件上传处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1119个文字,预计阅读时间需要5分钟。
ThinkPHP文件上传接口不仅调用`move()`方法就完事,还需事先配置校验、明确路径权限、处理null和异常,否则上线后失败率高达500%或静默失败。
表单提交后 request()->file('xxx') 返回 null 怎么办
这不是代码写错了,而是请求根本没把文件送进来。最常见三个原因:
- HTML 表单漏了
enctype="multipart/form-data"—— 没这个,$_FILES就是空数组,request()->file()必然 null - 前端
<input type="file" name="avatar">的name和后端request()->file('avatar')对不上 - PHP 或 Nginx 限制了上传大小:
upload_max_filesize、post_max_size、client_max_body_size三者中任意一个卡住,文件就被截断,$_FILES里error是UPLOAD_ERR_INI_SIZE,但 ThinkPHP 不主动暴露它
排查时先在控制器开头加一行:dump($_FILES); exit;,看原始数据是否存在、error 是否为 0。
本文共计1119个文字,预计阅读时间需要5分钟。
ThinkPHP文件上传接口不仅调用`move()`方法就完事,还需事先配置校验、明确路径权限、处理null和异常,否则上线后失败率高达500%或静默失败。
表单提交后 request()->file('xxx') 返回 null 怎么办
这不是代码写错了,而是请求根本没把文件送进来。最常见三个原因:
- HTML 表单漏了
enctype="multipart/form-data"—— 没这个,$_FILES就是空数组,request()->file()必然 null - 前端
<input type="file" name="avatar">的name和后端request()->file('avatar')对不上 - PHP 或 Nginx 限制了上传大小:
upload_max_filesize、post_max_size、client_max_body_size三者中任意一个卡住,文件就被截断,$_FILES里error是UPLOAD_ERR_INI_SIZE,但 ThinkPHP 不主动暴露它
排查时先在控制器开头加一行:dump($_FILES); exit;,看原始数据是否存在、error 是否为 0。

