PHP文件上传异常:annonce.php文件无法传递至index.php
排查文件上传后
$_FILES为空的问题 我帮你梳理几个最可能导致这个问题的核心原因,咱们一个个来排查解决:
1. 表单缺少enctype="multipart/form-data"属性
这是文件上传的硬性要求!如果你的表单没设置这个属性,浏览器根本不会把文件数据发送给服务器,后端的$_FILES自然是空的。
看你提供的代码里没有包裹上传区域的<form>标签,赶紧补上(还要指定提交目标为index.php):
<form action="index.php" method="POST" enctype="multipart/form-data"> <!-- 把你的所有上传input、图片预览、提交按钮都放在这个表单里 --> <div class="container"> <!-- 你的现有HTML代码 --> <button name="submitAnnonce" type="submit" class="btn btn-primary col-lg-3" style="margin-left: 4px">Valider</button> </div> </form>
要是之前没设置action="index.php",表单默认会提交到当前的annonce.php,那index.php肯定拿不到任何上传数据。
2. 前端JS检查≠后端能正确接收
你用setInterval检查前端输入不为空,这只是前端的状态。哪怕前端选了文件,只要表单编码不对,浏览器就不会把文件数据发去服务器,后端自然拿不到$_FILES数据。先把表单的问题解决,再看后端逻辑。
3. PHP配置限制导致文件被拦截
如果上传的文件大小超过了PHP的配置上限,$_FILES也会为空,检查这两个关键配置:
upload_max_filesize:单个文件的最大允许上传大小(比如设置为10M)post_max_size:整个POST请求的最大大小,这个值要比upload_max_filesize大(比如12M)
你可以在PHP页面里用phpinfo()查看当前配置,或者联系主机服务商调整。
4. 确认index.php的接收逻辑对应正确
在index.php里,要使用和前端input完全一致的name来获取文件,比如:
if(isset($_POST["submitAnnonce"])){ $imageNames = array('fileToUpload','file2ToUpload','file3ToUpload','file4ToUpload','file5ToUpload'); foreach($imageNames as $name){ if(!empty($_FILES[$name]["tmp_name"])){ // 这里处理上传的文件 echo "文件{$name}已成功上传"; } } }
注意name的大小写、拼写必须和前端input完全匹配,不然也拿不到数据。
额外提醒:你的当前代码逻辑是在annonce.php处理上传,而非传递到index.php
看你贴的PHP代码是写在annonce.php里的,如果你想把文件传递到index.php处理,必须让表单直接提交到index.php——也就是前面说的设置action="index.php",而不是在当前页面做处理。
优先解决表单的enctype和提交目标问题,这大概率是你当前遇到的核心问题,之后再一步步排查其他可能性。
内容的提问来源于stack exchange,提问作者Ykamis
相关产品推荐
相关产品推荐

