codeigniter 文件上传路径需通过 upload_path 配置项指定绝对路径(推荐 fcpath . 'uploads/'),目录须手动创建并赋予写权限;ci4 则使用 $file->move(writepath . 'uploads/', $newname)。

CodeIgniter 上传文件的保存路径主要通过上传类的 upload_path 配置项控制,必须是服务器上真实存在的、具有写权限的绝对路径(或相对于 FCPATH 的相对路径),且结尾需带斜杠。
核心配置方式
在控制器中初始化上传类时设置:
-
使用绝对路径更可靠:推荐用
FCPATH常量拼接,例如'upload_path' => FCPATH . 'uploads/images/' -
目录必须提前创建:CodeIgniter 不会自动创建多级目录,
uploads/images/需手动建好 -
必须有写权限:Web 服务器用户(如 www-data、apache)需对目录有
write权限,Linux 下常用chmod 755或775
常见路径写法对比
以下写法效果相同,但推荐第一种:
-
'upload_path' => FCPATH . 'uploads/'✅(清晰、可移植、不受入口文件位置影响) -
'upload_path' => './uploads/'⚠️(依赖当前执行脚本位置,易出错) -
'upload_path' => '/var/www/myapp/uploads/'⚠️(硬编码,换环境需修改)
安全与规范建议
避免路径穿越和越权访问:
-
不要暴露 uploads 目录在 Web 根目录下直连访问,如需公开访问,用
site_url('uploads/xxx.jpg')走路由,而非直接http://yoursite.com/uploads/xxx.jpg -
数据库只存相对路径或文件名,例如
uploads/images/photo_abc123.jpg,而不是完整绝对路径 -
上传后校验路径合法性:用
realpath()和strpos()确保最终路径确实在允许目录内,防止../攻击
CodeIgniter 4 的额外注意点
CI4 使用 UploadedFile 对象,路径由 move() 方法指定目标目录:
$file->move(WRITEPATH . 'uploads/', $newName)-
WRITEPATH是 CI4 内置常量(对应writable/uploads/),比FCPATH更符合框架设计意图 - 移动成功后,可用
$file->getName()获取最终保存的文件名(含系统重命名后的名称)











