codeigniter 3 自带 ftp 类是轻量级远程文件管理方案,支持上传、镜像、列目录等操作;需注意被动模式启用、八进制权限、debug 关闭及路径校验等安全要点。

CodeIgniter 3 自带的 FTP 类是处理远程文件管理最直接、最轻量的方案,无需额外依赖,适合在控制器中快速实现上传、同步、目录镜像等操作。它不替代专业客户端,但能无缝嵌入业务逻辑——比如用户提交后自动上传附件到 FTP 服务器,或定时同步静态资源。
FTP 类基础用法与关键配置
加载后通过 $this->ftp 调用,连接参数支持数组传参或配置文件方式。必须注意以下几点:
- 端口默认为 21,若使用 SFTP 或非标端口(如 2221),需显式设置
$config['port'] - 被动模式(
'passive' => TRUE)在多数云服务器和 NAT 环境下必须开启,否则list_files()可能返回空数组 - 权限值用八进制整数(如
0755),写成字符串"755"会导致 chmod 失效 -
debug => TRUE仅用于开发期排错,上线前务必关闭,避免敏感信息泄露
常用文件操作场景与代码示例
不是所有操作都需要手写完整流程,CI 的 FTP 类封装了高频需求:
-
单文件上传:指定本地路径、远程路径、传输模式(
'ascii'适合 HTML/JS/CSS;'binary'适合图片、压缩包),并设权限:$this->ftp->upload('/var/www/app/uploads/logo.png', '/htdocs/assets/logo.png', 'binary', 0644); -
目录镜像同步:本地文件夹结构完整复制到远程,自动跳过未变更文件,适合部署静态资源:
$this->ftp->mirror('/var/www/app/public/', '/public_html/'); -
获取远程文件列表:返回含完整路径的数组,可用于生成 CDN 清单或校验备份完整性:
$files = $this->ftp->list_files('/backup/202608/'); -
创建远程目录:支持递归创建,权限需单独调用
chmod():$this->ftp->mkdir('/logs/2026/08', 0755, TRUE);
安全与稳定性注意事项
FTP 协议本身明文传输,生产环境应规避密码硬编码,并限制操作范围:
- 用户名/密码建议从环境变量或加密配置读取,避免写死在控制器里
- 远程路径必须做白名单校验,防止路径遍历攻击(如用户传入
../../etc/passwd) - 大文件上传前检查
upload_max_filesize和post_max_size,FTP 类不处理超限,失败时仅返回 FALSE - 连接后务必调用
$this->ftp->close(),否则可能耗尽 FTP 连接数,尤其在高并发场景
替代方案与适用边界
当需求超出 FTP 类能力时,可考虑更可控的组合:
- 需要 SFTP(SSH 加密):改用 PHP 的
ssh2_sftp扩展,配合第三方库如phpseclib,CI 中可封装为自定义库 - 需断点续传或异步上传:前端用 WebUploader 或 Uppy,后端接收后走 FTP 类上传,避免阻塞请求
- 频繁读写小文件(如日志轮转):优先用本地存储 + rsync 同步,比 FTP 更稳定高效
- 管理界面需求:集成 WebFTP 工具(如 WebFTP_v2.5.1)作后台补充,不与 CI 业务逻辑耦合











