设置enctype=multipart/form-data后PHP上传表单无数据传递问题
解决PHP Multipart表单$_POST/$_FILES为空的问题
我之前也碰到过一模一样的情况!结合你给出的服务器信息和代码,咱们一步步排查最可能的原因:
1. 优先检查PHP配置的大小限制(最常见原因)
从$_SERVER里的CONTENT_LENGTH(14532844,约14MB)来看,你的上传内容总大小已经接近默认的PHP上传限制了。如果PHP的配置参数过小,会直接丢弃整个POST请求,导致$_POST和$_FILES全为空。
打开你的php.ini文件(MAMP的话一般在MAMP/bin/php/phpX.X.X/conf/php.ini),检查并修改以下参数:
post_max_size = 20M:这个值必须大于你上传的总文件大小(包括表单其他数据),建议设为20M或更大upload_max_filesize = 15M:单个文件的最大允许上传大小,要大于你上传的视频/图片大小max_execution_time = 60:给大文件上传足够的执行时间max_input_time = 60:处理POST数据的时间上限
修改后重启Apache服务器,再测试上传。
2. 检查mod_fcgid的请求长度限制
你的服务器用了mod_fcgid/2.3.9,这个模块有自己的请求大小限制,如果超过这个值也会截断请求。
打开Apache的配置文件(httpd.conf或对应虚拟主机的配置),添加或修改:
FcgidMaxRequestLen 20971520
这里的20971520等于20MB,你可以根据需要调整。修改后同样要重启Apache。
3. 确认表单的基础配置(再核对一遍)
- 确保表单的
enctype="multipart/form-data"没有拼写错误(比如少了横杠写成multipart/formdata) - 确认
method="post"正确,get方式无法处理文件上传 - 检查
action路径是否正确:你的表单action是tour_insert.php,从$_SERVER['SCRIPT_FILENAME']看处理文件确实是这个,没问题;Linux环境要注意大小写,Windows下不用在意。
4. 用小文件测试验证
先上传一个几KB的小图片和小视频,如果此时$_FILES和$_POST能正常获取到数据,那100%是大小限制的问题,回到步骤1和2调整配置即可。
额外调试技巧
在tour_insert.php最开头加上这段代码,能帮你快速看到错误信息:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); var_dump($_POST); var_dump($_FILES); ?>
如果是大小限制问题,这里会直接输出类似POST content length exceeds the limit的错误提示。
内容的提问来源于stack exchange,提问作者Amirition
相关产品推荐
相关产品推荐

