PHP文件上传异常:选择MP4时$_POST['submit']检测为false
问题:上传MP4文件时PHP无法检测到submit字段,但PNG文件正常
相关PHP代码
<!DOCTYPE html> <html lang="en"> <body> <?php $filename=""; if($_SERVER['REQUEST_METHOD'] == 'POST') { echo "isset post submit: " .(isset($_POST['submit'])?"true":"false"); if(isset($_POST['submit'])) { $filename=$_FILES["local_med"]["name"]; echo "<p>file: " .$filename; } } // POST ?> <h1>Upload File</h1> <form method="POST" enctype="multipart/form-data" > <input type="file" id="local_med" name="local_med" required="true" accept="image/png, video/mp4"/> <br> <button type="submit" name="submit"> Submit </button> </form> </body> </html>
现象描述
- 选择
.png文件点击提交后,页面输出:
isset post submit: true file: age.png
- 选择
.mp4文件提交后,页面输出:
isset post submit: false
补充信息
更新1:尝试用开发者工具查看请求payload,但找不到对应标签。
更新2:在Firefox中尝试,可以看到相关请求内容。
可能的原因及解决方向
- PHP上传大小限制:MP4文件体积通常远大于PNG,如果文件大小超过了PHP配置中的
upload_max_filesize或post_max_size值,PHP会直接丢弃整个POST请求的所有数据,自然检测不到$_POST['submit']。 - 服务器层面的请求限制:像Nginx、Apache这类Web服务器,自身也有请求体大小限制(比如Nginx的
client_max_body_size),如果MP4文件超过这个限制,服务器会直接拒绝请求,PHP根本接收不到任何POST数据。 - 安全模块拦截:服务器上的安全插件(如ModSecurity)可能将大文件上传判定为风险请求,直接拦截,导致PHP收不到请求内容。
验证方法
- 查看php.ini配置文件,确认
upload_max_filesize、post_max_size、max_input_time这几个参数的值,确保要上传的MP4文件大小在允许范围内; - 检查Web服务器的配置,比如Nginx的
client_max_body_size、Apache的LimitRequestBody,调整到合适大小; - 尝试上传一个极小的测试MP4文件(几KB大小),如果能正常检测到submit字段,就可以确定是文件大小限制导致的问题。
内容的提问来源于stack exchange,提问作者sofname
相关产品推荐
相关产品推荐

