codeigniter 文件上传大小限制需同时满足 php、web 服务器和框架三层配置:php 层调整 upload_max_filesize 和 post_max_size;codeigniter 层用 max_size(kb)等参数校验;web 服务器层可选 limitrequestbody 或 client_max_body_size 加固。

CodeIgniter 本身不直接设定上传文件的“最大字节数”,而是依赖 PHP 的底层配置和框架层的校验规则。要真正生效,必须同时满足 PHP 运行时限制、Web 服务器限制,以及 CodeIgniter 的应用级验证。
PHP 层:修改 upload_max_filesize 和 post_max_size
这是最根本的限制,必须先调整。这两个值在 php.ini 中设置:
-
upload_max_filesize:单个上传文件的最大大小(例如
10M) -
post_max_size:整个 POST 请求体的最大大小(需 ≥ upload_max_filesize,建议设为
12M或更高)
修改后需重启 Web 服务器(Apache/Nginx + PHP-FPM)。可通过 phpinfo() 或 ini_get('upload_max_filesize') 确认是否生效。
CodeIgniter 层:配置上传类参数
在控制器中使用 $this->upload->do_upload() 前,通过 set_config() 设置允许的大小和类型:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
max_size:单位是KB(不是字节!),例如
2048表示 2MB -
allowed_types:用竖线分隔的 MIME 类型或扩展名,如
'jpg|jpeg|png|pdf' - max_filename、encrypt_name 等可选参数用于增强安全性
注意:CodeIgniter 的 max_size 是应用级校验,仅在 PHP 允许范围内起作用;若 PHP 已拒绝上传(如超 upload_max_filesize),框架根本收不到文件,也就不会触发该检查。
安全补充:扩展名与 MIME 双重校验
仅靠 allowed_types 不够安全。CodeIgniter 4.0.5 起强化了上传扩展名策略,建议:
- 启用
detect_mime(默认 true),让框架读取文件头判断真实类型 - 配合
sanitize_filename()清理原始文件名,防止路径遍历 - 避免使用用户提交的扩展名,改用
guessExtension()或白名单映射
Web 服务器层(可选加固)
Apache 用户可在项目根目录或 public/.htaccess 中添加:
LimitRequestBody 10485760
这限制单个请求体最大为 10MB,与 PHP 配置协同防御恶意大文件攻击。Nginx 用户则需在 nginx.conf 的 http 或 server 块中设置 client_max_body_size 10M;。










