UPLOAD_ERR_OK(0)表示文件已传至服务器临时目录,但不意味安全可用;常见错误码中,1表示超php.ini的upload_max_filesize限制,需同步调大upload_max_filesize和post_max_size并重启服务。

UPLOAD_ERR_OK(0)表示上传流程完成,文件已存入服务器临时目录——但这只是“传输成功”,不等于文件安全或可直接使用。真正的问题往往藏在其他错误码里,它们直指配置、权限、网络或表单层面的具体瓶颈。
UPLOAD_ERR_INI_SIZE(1):php.ini 限制太严
这是最常被忽略的硬性门槛。PHP 默认 upload_max_filesize 通常只有 2M,哪怕表单和前端都允许传 50M,只要超过 php.ini 的设定值,就会触发该错误。
- 需同步调整两个参数:upload_max_filesize(单文件上限)和 post_max_size(整个 POST 请求上限,必须 ≥ 前者)
- 修改后必须重启 Web 服务(如 Apache 或 PHP-FPM),仅 reload 不生效
- 用
phpinfo()页面确认实际生效值,避免读错配置文件路径
UPLOAD_ERR_FORM_SIZE(2):表单自己设了“隐形墙”
HTML 表单中若写了 <input type="hidden" name="MAX_FILE_SIZE" value="5242880">,PHP 会在接收时主动校验——哪怕 php.ini 放得再宽,只要文件超这个值就报错 2。
- 该字段纯属客户端提示,可被绕过,不能替代服务端校验
- 调试时可临时移除该隐藏域,确认是否为它导致失败
- 生产环境建议删掉它,改由 PHP 层统一控制大小逻辑
UPLOAD_ERR_PARTIAL(3)和 UPLOAD_ERR_NO_FILE(4):用户侧问题明显
错误 3 说明文件传了一半断了,常见于弱网、超时或浏览器中断;错误 4 则是表单根本没选文件就点了提交——两者都不涉及服务端配置,但容易误判为后端故障。
立即学习“PHP免费学习笔记(深入)”;
- 错误 3 可配合增大 max_execution_time 和 max_input_time 缓解
- 错误 4 需前端加必填校验(
required属性),后端也必须做空检查,不能只依赖 error 码 - 注意:当
$_FILES['xxx']为空数组时,['error']可能未定义,应先isset()再取值
UPLOAD_ERR_NO_TMP_DIR(6)、UPLOAD_ERR_CANT_WRITE(7)、UPLOAD_ERR_EXTENSION(8):环境与扩展异常
这三类错误指向底层运行环境异常,不是代码逻辑问题,而是部署疏漏。
- 错误 6:PHP 找不到临时目录,检查 upload_tmp_dir 是否配置且路径真实存在、有写权限
- 错误 7:临时目录或目标目录磁盘满、权限不足(如 www-data 无权写入)、SELinux/ACL 限制等
- 错误 8:某些安全扩展(如 Suhosin、mod_security)或自定义 upload hook 主动拒绝上传,需查扩展日志



















