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

CodeIgniter3文件上传do_upload()始终返回default.jpg如何修复

CodeIgniter3 文件上传始终返回default.jpg修复方案

问题触发场景:Debian11 + XAMPP8.1 环境下 CodeIgniter3 框架的文件上传接口,无论是否提交文件、文件是否符合规则,始终返回default.jpg,无法获取实际上传文件名。

核心故障原因排查&修复

1. 表单缺失文件上传必备属性(最高发原因)

现有视图代码只写了file输入框,但是包裹输入框的<form>标签没有加enctype="multipart/form-data"属性,浏览器不会将文件二进制数据提交到后端,do_upload()方法会直接判定无有效上传文件,返回失败。
修复方式:给对应表单标签补充必填属性:

<!-- 必须加enctype属性,method必须为post -->
<form method="post" action="你的表单提交地址" enctype="multipart/form-data">
    <div class="form-group">
        <label for="file">Attachment</label>
        <input class="form-control-file" type="file" name="file" />
        <div class="invalid-feedback">
            <?php echo form_error('file') ?>
        </div>
    </div>
    <!-- 其他表单项、提交按钮 -->
</form>

2. 上传目录无写入权限

Debian系统下XAMPP默认以daemon用户运行,若./assets/img/report/目录没有给对应用户开放读写权限,上传时文件无法写入磁盘,会直接触发上传失败。
修复方式:在Debian终端执行以下命令,替换路径为你项目的实际路径:

# 进入XAMPP默认站点根目录
cd /opt/lampp/htdocs/你的项目根目录
# 给上传目录设置读写执行权限
chmod -R 755 ./assets/img/report/
# 将目录所有者修改为XAMPP运行用户
chown -R daemon:daemon ./assets/img/report/

3. 后端代码存在语法&逻辑缺陷

原有代码存在两个问题:一是return default.jpg的字符串没有加引号,PHP解析时会尝试查找未定义常量,触发异常;二是如果上传库在之前的逻辑中已经被加载过,直接传config参数加载不会覆盖原有配置,会导致配置不生效。
修复后的上传逻辑代码:

$config['upload_path']      = './assets/img/report/';
$config['allowed_types']    = 'txt|odt|jpg|png|jpeg|pdf|docx';
$config['file_name']        = $this->id;
$config['overwrite']        = true;
$config['max_size']         = 150000;

// 兼容已加载过上传库的场景,重新初始化配置
if (empty($this->upload)) {
    $this->load->library('upload', $config);
} else {
    $this->upload->initialize($config);
}

if ($this->upload->do_upload('file')) {
    return $this->upload->data('file_name');
} else {
    // 调试时可放开下一行,打印具体上传错误,正式环境注释即可
    // echo $this->upload->display_errors();exit;
    return 'default.jpg';
}

4. PHP上传大小配置限制(大文件上传场景需检查)

当前代码设置单文件最大为150000KB即150MB,如果XAMPP的PHP配置中upload_max_filesize、post_max_size小于该值,会导致大文件上传被拦截。
修复方式:打开XAMPP的php.ini配置文件(默认路径/opt/lampp/etc/php.ini),修改对应配置:

upload_max_filesize = 200M
post_max_size = 200M

修改完成后执行/opt/lampp/lampp restart重启XAMPP服务生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:57:14