You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8实现文件上传时$_FILES数组为空无返回的问题求助

PHP文件上传$_FILES为空问题原因及解决方案

核心原因

  • 表单属性配置错误:你的<form>标签错误写了两个action属性,将本应定义提交方式的method="post"错写为action="post",导致表单默认使用GET方式提交请求。
  • 文件上传必须依赖POST请求+enctype="multipart/form-data"的配置,GET请求只会将表单参数拼接在URL中(你Apache日志里也能看到是GET请求,参数直接挂在URL后面),不会携带文件二进制内容,因此PHP的$_FILES数组必然为空。

其他代码隐含问题

  • $_FILES数组的键是表单中文件控件的name属性值(也就是你这里的upfile字符串),不是数字索引,现有代码中用for循环按数字下标遍历的逻辑会报错,无法取出文件信息。
  • 现有代码中copy($_FILES["upfile"]["tmp_name"], $info)的逻辑完全无效,$info取的就是临时文件路径,等于把文件复制到本身,没有实际存储意义,且PHP上传文件推荐用更安全的move_uploaded_file函数,可校验文件是否为合法上传的文件。
  • 缺少上传错误状态校验,直接判断size>0可能触发不存在的数组键错误,建议优先判断$_FILES['upfile']['error']是否等于UPLOAD_ERR_OK。

修复步骤

  1. 修正表单属性,将多余的action改为method:
<form action="hochladen.php" method="post" enctype="multipart/form-data">
    <p> <input name="upfile" type="file"></p>
    <p> <input type="submit" name="hochladen"></p><br>
</form>
  1. 修正PHP处理逻辑,示例如下:
<?php
// 先判断是否为POST提交且有上传文件
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upfile'])) {
    $uploadFile = $_FILES['upfile'];
    // 校验上传是否成功
    if ($uploadFile['error'] === UPLOAD_ERR_OK) {
        // 自定义存储路径,需提前创建upload目录并赋予写入权限
        $savePath = __DIR__ . '/upload/' . basename($uploadFile['name']);
        // 移动临时文件到目标存储路径
        if (move_uploaded_file($uploadFile['tmp_name'], $savePath)) {
            echo "文件上传成功,存储路径:" . $savePath;
        } else {
            echo "文件存储失败,请检查目录权限";
        }
    } else {
        echo "上传出错,错误码:" . $uploadFile['error'];
    }
}
?>

内容的提问来源于stack exchange,提问作者Michael Konz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 22:36:03