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

Codeigniter图片上传成功但视频上传失败,encrypt_name失效求助

Codeigniter 图片/视频上传问题修复方案

核心问题拆解

  • Upload库未重新初始化:第一次加载上传库后,第二次直接调用load->library不会覆盖原有配置,导致视频的encrypt_name和其他上传规则完全不生效。
  • 错误捕获缺失:没判断do_upload()的返回结果,根本不知道视频上传失败的具体原因——是文件超了PHP限制?目录没权限?还是类型不匹配?
  • 文件判断逻辑不准确:用$_FILES['xxx']['tmp_name'] !== NULL判断文件是否上传不可靠,应该用$_FILES['xxx']['error'] === 0来确认文件是否成功提交。

修复后的完整代码

// 用错误码判断文件是否成功上传,比tmp_name更可靠
$imageError = $_FILES['imagearchiev']['error'];
$videoError = $_FILES['videoarchiev']['error'];

if ($imageError === 0 && $videoError === 0) {
    // 图片上传流程
    $config['upload_path'] = realpath('assets/image/icon/');
    $config['allowed_types'] = 'gif|jpg|png|jpeg';
    $config['max_size'] = 2000; 
    $config['encrypt_name'] = true;
    
    $this->load->library('upload', $config);
    if ($this->upload->do_upload('imagearchiev')) {
        $data_upload = $this->upload->data(); 
        $imagearchiev = $data_upload['file_name'];
    } else {
        // 记录图片上传错误,方便排查
        log_message('error', '图片上传失败: ' . $this->upload->display_errors());
        redirect('admin/addarchievement?error=image_upload');
    }

    // 视频上传流程:必须重新初始化上传配置,不能重复加载库
    $config2['upload_path'] = realpath('assets/image/icon/'); // 建议改成视频专属目录,比如assets/video/
    $config2['allowed_types'] = 'mp4'; // 不用区分大小写,框架会自动处理
    $config2['max_size'] = 20000000; // 注意PHP配置要支持这个大小
    $config2['encrypt_name'] = true;
    
    // 关键:用initialize重置配置,而不是重新加载库
    $this->upload->initialize($config2);
    if ($this->upload->do_upload('videoarchiev')) {
        $data_upload2 = $this->upload->data(); 
        $videoarchiev = $data_upload2['file_name'];
    } else {
        // 记录视频上传错误
        log_message('error', '视频上传失败: ' . $this->upload->display_errors());
        redirect('admin/addarchievement?error=video_upload');
    }

    $titlearchiev = $this->input->post('titlearchiev');
    $textarchiev = $this->input->post('summernote');
    // 这里记得添加数据入库的逻辑(原代码里没写)
    redirect('admin/addarchievement?success=1');
} else {
    // 处理文件未选中或上传失败的情况
    redirect('admin/addarchievement?error=file_not_selected');
}

额外必查项

  • PHP配置调整:确保php.ini里的upload_max_filesize、post_max_size要大于你设置的20000000字节(约19M),比如设为upload_max_filesize = 20M,post_max_size = 25M(后者必须比前者大);max_execution_time也要适当调大,避免上传大文件超时。
  • 目录权限:上传目录要给服务器写入权限,一般设为755,部分环境可能需要777(根据服务器配置调整)。
  • 日志开启:打开Codeigniter的日志功能,能直接看到上传失败的具体报错,比瞎猜高效太多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:27:37