Bootstrap文件上传功能异常:PHP端$_FILES返回空数组
排查文件上传返回
array(0) { }的原因 我来帮你一步步拆解这个问题,从最容易忽略的错误开始排查:
1. 文件输入框缺少name属性(最核心的问题)
你前端的<input type="file" class="form-control-file">没有设置name属性!PHP的$_FILES超级全局变量是依赖表单元素的name来识别上传文件的,没有这个标识,后端根本接收不到任何文件数据。
修改后的前端代码需要补上name属性,比如:
<div class="container"> <div class="jumbotron mt-3" style="padding: 0.6em 1.6em;"> <h4>Uploader</h4> <form enctype="multipart/form-data" action="/myurl/?action=upload" method="POST"> <input type="file" class="form-control-file" name="upload_file"> <!-- 添加name属性 --> <input type="submit" class="btn btn-primary" name="Upload"> </form> </div> </div>
之后后端用var_dump($_FILES['upload_file']);就能看到上传的文件数据了。
2. 确认表单的enctype属性有效性
你已经正确设置了enctype="multipart/form-data",这是文件上传的必要条件——没有它浏览器不会对文件数据进行正确编码,后端自然收不到文件。这条你的代码没问题,可以直接排除。
3. 检查PHP配置的上传限制
如果补了name属性还是不行,要检查php.ini里的相关配置:
file_uploads:必须设为On,否则PHP直接禁用了文件上传功能upload_max_filesize:如果上传的文件大小超过这个值,会导致$_FILES为空post_max_size:这个值必须大于upload_max_filesize,因为POST请求的总数据量(包括文件)不能超过它
可以在PHP代码里添加phpinfo();来查看当前生效的配置信息。
4. 确认表单提交路径和方式
你的表单用了method="POST",这是正确的(文件上传不能用GET请求)。另外要确认action属性里的/myurl/?action=upload确实指向了处理上传的PHP文件,避免路径错误导致请求落到了其他未处理上传的页面。
内容的提问来源于stack exchange,提问作者JoeSlav
相关产品推荐
相关产品推荐

