CodeIgniter 文件上传与图像处理需配置 Upload 和 Image_lib 类,扩展 MIME 支持 zip/rar,上传后重命名并存库,再用 GD2 或 ImageMagick 缩放、加水印并保存。

CodeIgniter 实现文件上传与图像处理,核心在于合理配置、正确加载类库、严格验证输入,并结合 GD2 或 ImageMagick 执行具体操作。它不依赖第三方插件,而是通过内置的 Upload 和 Image_lib 类协同完成——上传是前提,处理是延伸,二者需分步但连贯地设计。
上传配置与 MIME 类型扩展
默认只支持常见图片类型(jpg/jpeg/png/gif),若需上传 rar、zip 等压缩包,需手动扩展 MIME 映射:
- 打开 application/config/mimes.php,在数组中补充或修改对应项:
"zip" => array("application/x-zip", "application/zip", "application/x-zip-compressed", "application/octet-stream"),
"rar" => array("application/octet-stream")
- 上传控制器中启用验证规则,如限制大小、类型、是否必须:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|jpeg|png|zip|rar';
$config['max_size'] = 2048; // KB
$this->load->library('upload', $config);
基础图片上传与路径生成
上传成功后,通常需保存原始图并生成唯一标识,为后续处理或分享做准备:
- 使用
$this->upload->data()获取完整上传信息(含文件名、路径、大小等); - 建议重命名文件避免冲突,例如用
uniqid() . '_' . $_FILES['userfile']['name']; - 创建子目录存放用户上传内容(如按日期或用户ID),提升组织性与安全性;
- 数据库记录原始路径、缩略图路径、上传时间、访问码等元数据,便于管理与调用。
图像处理:GD2 与 ImageMagick 的选择与配置
CodeIgniter 图像处理类默认使用 GD2,但部分高级功能(如高质量缩放、复杂水印)需 ImageMagick 支持:
- 确认环境已安装 GD2(PHP 编译时启用)或 ImageMagick(Mac 可用 Cactuslab 安装器,路径设为
/opt/ImageMagick/bin); - 初始化处理类时指定库路径(ImageMagick 必须):
$config['image_library'] = 'imagemagick'; $config['library_path'] = '/opt/ImageMagick/bin'; $config['source_image'] = './uploads/photo.jpg'; $config['maintain_ratio'] = TRUE;
- 常用操作直接链式调用:
resize()、crop()、rotate()、watermark(),每步执行后需调用save()或clear()重置配置。
典型组合流程:上传 → 缩略图 → 水印 → 存库
一个实用场景是用户上传照片后自动生成封面图和带版权标识的版本:
- 先上传原始图,获取保存路径;
- 用
resize()生成 200×200 缩略图,存入./uploads/thumbs/; - 再对原图调用
watermark(),指定文字或图片水印位置与透明度; - 最后将原始路径、缩略图路径、水印图路径及唯一 code 写入数据库,返回可分享链接。


















