镖师 发表于 2023-3-11 07:42:52

后台开发之showsetting() file类型怎么获取上传后的地址



POST有信息,但是debug($_files)啥也没有是空数组


代码如下:


后台页面:


如何上传后获取文件在服务器中上传的地址,我要保存路径到数据库,谢谢da

独家记忆 发表于 2023-3-11 07:43:03

enctype没加

Discuz智能体 发表于 2025-3-17 04:42:44

在Discuz后台开发中,`showsetting()` 函数用于生成后台设置项的表单元素。对于文件上传类型(`file`),你需要通过PHP的`$_FILES`全局数组来获取上传的文件信息。如果你发现`$_FILES`是空数组,可能是因为表单的`enctype`属性没有正确设置,或者文件上传的大小超过了PHP配置的限制。

### 1. 确保表单的`enctype`属性正确
在后台页面中,确保你的表单设置了`enctype="multipart/form-data"`,这样才能正确上传文件。

<form method="post" action="your_action.php" enctype="multipart/form-data">
    <!-- 其他表单元素 -->
    <input type="file" name="your_file_input_name">
    <input type="submit" value="上传">
</form>

### 2. 检查PHP配置
确保PHP的`upload_max_filesize`和`post_max_size`配置足够大,以允许上传你需要的文件大小。你可以在`php.ini`中修改这些配置,或者在代码中使用`ini_set()`函数临时修改。

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');

### 3. 获取上传文件并保存路径
在后台处理上传文件的PHP脚本中,你可以通过`$_FILES`数组获取上传的文件信息,并将文件保存到服务器上。然后,你可以将文件路径保存到数据库中。

if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_FILES['your_file_input_name']['name'])) {
    $uploadDir = 'uploads/'; // 上传目录
    $uploadFile = $uploadDir . basename($_FILES['your_file_input_name']['name']);

    // 检查文件是否已经存在
    if (file_exists($uploadFile)) {
      echo "文件已存在。";
    } else {
      // 尝试移动上传的文件
      if (move_uploaded_file($_FILES['your_file_input_name']['tmp_name'], $uploadFile)) {
            echo "文件上传成功。";

            // 将文件路径保存到数据库
            $filePath = $uploadFile;
            // 这里写你的数据库保存逻辑
            // 例如:DB::insert('your_table', ['file_path' => $filePath]);

      } else {
            echo "文件上传失败。";
      }
    }
}

### 4. 使用`showsetting()`生成文件上传表单
在Discuz后台页面中,你可以使用`showsetting()`函数生成文件上传的表单元素。

showsetting('文件上传', 'your_file_input_name', '', 'file');

### 5. 处理上传的文件
在后台处理逻辑中,你可以通过`$_FILES`获取上传的文件,并将其保存到服务器上。

if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_FILES['your_file_input_name']['name'])) {
    $uploadDir = 'uploads/'; // 上传目录
    $uploadFile = $uploadDir . basename($_FILES['your_file_input_name']['name']);

    if (move_uploaded_file($_FILES['your_file_input_name']['tmp_name'], $uploadFile)) {
      // 文件上传成功,保存路径到数据库
      $filePath = $uploadFile;
      // 这里写你的数据库保存逻辑
    } else {
      // 文件上传失败
    }
}

### 总结
1. 确保表单的`enctype`属性设置为`multipart/form-data`。
2. 检查PHP的文件上传配置,确保允许上传的文件大小足够。
3. 使用`$_FILES`数组获取上传的文件信息,并将文件保存到服务器上。
4. 将文件路径保存到数据库中。

如果你按照以上步骤操作,应该能够成功上传文件并获取文件路径。如果还有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 后台开发之showsetting() file类型怎么获取上传后的地址