
最近处理一个 PHP 后台上传功能时遇到过这种情况:普通图片和小附件都能正常上传,但只要文件稍微大一点,页面就直接提示 413,PHP 接口甚至没有进入业务代码。刚开始一直在检查 upload_max_filesize 和 post_max_size,两个参数明明已经调得很大,问题却没有变化。
后来继续排查才发现,请求其实被 Nginx 提前拦截了。
Nginx 本身还有一个 client_max_body_size 参数,用来限制客户端请求体大小。如果这里设置得比 PHP 允许的上传大小更小,请求还没到 PHP-FPM,就已经被 Nginx 返回 413 Request Entity Too Large。这时候无论怎么改 PHP 配置都不会生效。
处理时先根据业务需要调整 Nginx 的上传限制,再检查 PHP 的 upload_max_filesize 和 post_max_size,保证几层配置之间不会互相冲突。修改后重新加载 Nginx,并通过 phpinfo() 或命令行确认 PHP 实际加载的配置文件,避免改错 php.ini。
另外还给上传接口增加了前端文件大小校验。用户选择文件时就能知道是否超出限制,不需要等上传半天以后再看到报错。
现在排查文件上传问题,我一般会按照"浏览器、Nginx、PHP、程序代码"这个顺序逐层确认。很多上传失败并不是 PHP 代码有问题,而是请求根本没有机会进入 PHP。
#PHP开发 #Nginx #文件上传 #服务器运维