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

CodeIgniter中$this->input->post()返回NULL问题求助

解决CodeIgniter中Postman无法获取POST数据的问题

1. 检查Postman的请求体格式与Content-Type设置

浏览器表单默认用application/x-www-form-urlencoded编码提交数据,Postman如果选错格式会导致后端无法解析:

  • 模拟表单提交:选择x-www-form-urlencoded选项卡,逐个添加键值对(如name=xxx),Postman会自动添加正确的请求头;若用form-data,确保无文件上传场景下参数填写正确。
  • 提交JSON格式数据:选择raw -> JSON输入JSON字符串(如{"name": "xxx"}),同时在Headers里添加Content-Type: application/json。此时CodeIgniter的$this->input->post()无法直接读取JSON数据,需手动解析:
    $input = json_decode(file_get_contents('php://input'), true);
    $name = $input['name'] ?? null;
    

2. 关闭或绕过CSRF防护

CodeIgniter默认开启CSRF防护,浏览器表单会自动携带CSRF token,但Postman不会,导致请求被拦截:

  • 开发环境临时关闭:打开application/config/config.php,修改配置:
    $config['csrf_protection'] = FALSE;
    
  • 生产环境绕过:先访问含表单的页面,从响应HTML中获取csrf_test_name(或自定义的csrf_token_name)对应的隐藏字段值,在Postman的POST参数中添加该键值对,或在Headers里设置X-CSRF-Token: 你的token值(若配置了token放在请求头)。

3. 验证PHP配置

检查php.ini中的参数,避免因POST数据大小限制导致无法接收:

post_max_size = 8M
upload_max_filesize = 2M

修改后重启Web服务器。

4. 调试控制器方法

编写调试代码排查数据传输情况:

public function test() {
    echo "POST数据:";
    print_r($this->input->post());
    echo "<br>RAW输入:";
    print_r(file_get_contents('php://input'));
}

用Postman请求后查看响应,判断是数据未传输还是解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:04