当前位置:问答中心编程问题提交某些内容 php 接受到的 $_GET $_POST $_REQUEST 数组为空?

提交某些内容 php 接受到的 $_GET $_POST $_REQUEST 数组为空?

0
ni的益达 管理员 提问于 2年 前

通过 post 提交内容,有时候会出现这种问题,php 后端接收不到数据,打印 $_GET $_POST $_REQUEST 都是空数组,比如下面这个 curl:

curl 'http://local.diary-api.com:8018/index.php' \
  -H 'Connection: keep-alive' \
  -H 'Pragma: no-cache' \
  -H 'Cache-Control: no-cache' \
  -H 'Accept: application/json, text/javascript, */*; q=0.01' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36' \
  -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
  -H 'Origin: http://local.diary.com:8018' \
  -H 'Referer: http://local.diary.com:8018/' \
  -H 'Accept-Language: zh-CN,zh;q=0.9' \
  --data-raw 'gid=5e9e8f11187c89.26546237&passport=a97351829e428387afd71ec46b9f5c6e&auth_code=b42742&access_token=e99d3c&time_now=1648710861&client=h5&ver=1.1&sid=6389587223PMZQK&tks=0&action=addPlain&pid=0&title=%E6%89%80%E6%9C%89%E7%9A%84%E6%94%B6%E5%85%A5%E6%94%AF%E5%87%BA%E5%87%80%E5%80%BC%E6%9B%BF%E6%8D%A2%E4%B8%BA&start_time=1648656000&dead_time=1649519999&dead_hour=&important=1&id=0&content=%E6%89%80%E6%9C%89%E7%9A%84%E6%94%B6%E5%85%A5%E6%94%AF%E5%87%BA%E5%87%80%E5%80%BC%E6%9B%BF%E6%8D%A2%E4%B8%BA&cancel_give_up=0&XDEBUG_SESSION_START=1' \
  --compressed \
  --insecure

但是通过 file_get_contents( ‘php://input’) 是能够获取到内容的,获取到的内容如下:

gid=5e9e8f11187c89.26546237&passport=a97351829e428387afd71ec46b9f5c6e&auth_code=b42742&access_token=e99d3c&time_now=1648711022&client=h5&ver=1.1&sid=6389587223PMZQK&tks=0&action=addPlain&pid=0&title=%E6%89%80%E6%9C%89%E7%9A%84%E6%94%B6%E5%85%A5%E6%94%AF%E5%87%BA%E5%87%80%E5%80%BC%E6%9B%BF%E6%8D%A2%E4%B8%BA&start_time=1648656000&dead_time=1649519999&dead_hour=&important=1&id=0&content=%E6%89%80%E6%9C%89%E7%9A%84%E6%94%B6%E5%85%A5%E6%94%AF%E5%87%BA%E5%87%80%E5%80%BC%E6%9B%BF%E6%8D%A2%E4%B8%BA&cancel_give_up=0&XDEBUG_SESSION_START=1

提交别的内容又能正常提交,php 7.4 环境,不知道是为啥,请大神帮忙看看,谢谢。

1 人参与回答
0
空山新雨⁣ 管理员 发布于 2年 前

curl –data-raw 这种模式本来就是流模式,接收的时候是不会放到$_POST 里面的,只有 form-data 方式才会放进去$_POST, $_REQUEST 这些里面,就算框架做的时候也是要做兼容的,
$input = file_get_contents( ‘php://input’);
$params = $input ?: $_POST;
这并不是一个 bug