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

CodeIgniter中大写文件名图片无法在生产环境显示问题求助

解决CodeIgniter生产服务器大写文件名图片无法显示的问题

这个坑我之前踩过!根本原因就是本地Windows环境不区分文件名大小写,但生产服务器(大多是Linux)严格区分大小写。你数据库里存的是小写文件名,但实际上传到服务器的文件还是大写,自然就匹配不上,导致图片加载失败。直接在上传环节把文件名强制转成小写就能彻底解决,给你两种可行的修改方案:

方案一:上传前直接指定小写文件名(更稳妥)

在初始化上传配置的时候,先把原始文件名转成小写,直接用这个小写名称存储文件,这样就不用后续重命名了:

public function create() {
    // 检查登录状态
    if (!$this->session->userdata('logged_in')) {
        redirect('users/login');
    }

    $data['title'] = 'Create Post';

    // 上传基础配置
    $config['upload_path'] = './assets/images/posts/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2048';
    $config['max_width'] = '1920';
    $config['max_height'] = '1080';

    // 重点:获取原始文件名并转成小写
    $original_filename = $_FILES['userfile']['name'];
    $config['file_name'] = strtolower($original_filename);

    // 加载上传类并执行上传
    $this->load->library('upload', $config);

    if (!$this->upload->do_upload('userfile')) {
        $errors = array('error' => $this->upload->display_errors());
        $this->load->view('posts/create', array_merge($data, $errors));
    } else {
        // 直接获取小写文件名存入数据库
        $upload_data = $this->upload->data();
        $data['post_image'] = $upload_data['file_name']; // 这里已经是小写了

        // 后续插入数据库的逻辑
        $this->post_model->create_post($data);
        redirect('posts');
    }
}

方案二:上传后重命名文件(适合已有上传逻辑的修改)

如果你的上传逻辑已经写好,不想改配置,可以在上传成功后,把服务器上的文件重命名为小写:

public function create() {
    // 检查登录状态
    if (!$this->session->userdata('logged_in')) {
        redirect('users/login');
    }

    $data['title'] = 'Create Post';

    // 上传配置
    $config['upload_path'] = './assets/images/posts/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2048';
    $config['max_width'] = '1920';
    $config['max_height'] = '1080';

    $this->load->library('upload', $config);

    if (!$this->upload->do_upload('userfile')) {
        $errors = array('error' => $this->upload->display_errors());
        $this->load->view('posts/create', array_merge($data, $errors));
    } else {
        $upload_data = $this->upload->data();
        // 生成小写文件名
        $lowercase_filename = strtolower($upload_data['file_name']);
        // 重命名服务器上的文件
        rename($upload_data['full_path'], $config['upload_path'] . $lowercase_filename);
        // 把小写文件名存入数据库
        $data['post_image'] = $lowercase_filename;

        // 插入数据库
        $this->post_model->create_post($data);
        redirect('posts');
    }
}

额外处理:批量修改已有大写文件名

如果服务器上已经有一批大写文件名的图片,得手动把它们转成小写才能正常显示。你可以登录服务器,执行以下Linux命令(替换成你的图片文件夹路径):

cd /path/to/your/assets/images/posts
for file in *; do mv "$file" "$(echo $file | tr '[:upper:]' '[:lower:]')"; done

这个命令会把文件夹里所有文件的名称转成小写,注意执行前最好先备份一下文件哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:05