curl请求PHP接口post参数长度超过16383$_POST接收为空

salmonl 2018-12-15 11:22:35

curl 'http://i.niliu.me/xx/xxx' -d 'salmonlqqqqqqqqqqqqqqq'

PHP接口,POST请求参数字符长度小于等于16383, $_POST中就可以获取到,超过16383就获取不到,输出为空。提交小于等于10239个字符,nginx access log中能记录到post 参数,超过10239 access log中没记录post 参数。没有看到任何php和nginx错误。
请求示意图

接收示意图


服务器环境:php-fpm + nginx模式(php version 7.2)

php.ini中post相关设置
post_max_size 8M
upload_max_filesize 20M
max_execution_time = 100
max_input_time = 60
memory_limit = 32M
max_input_vars = 4000


nginx.conf中相关设置

client_max_body_size 120M;
client_header_timeout 5s;
fastcgi_buffer_size 4k;


fpm.conf中相关设置

request_terminate_timeout = 30

...全文
1324 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴火_凤凰 2020-07-02
  • 打赏
  • 举报
回复
去PHP.ini看一下配置 好像可以设置·大小的
salmonl 2020-01-07
  • 打赏
  • 举报
回复
引用 14 楼 fufuhen 的回复:
请教下,我也遇到了一样的问题,你这去年的帖子了,当时是怎么解决的呢,我觉得可能是服务器配置的问题,但是还没找到
我们是在Docker中部署的服务,重新部署就好了,可能跟文件描述符占满了有关。
fufuhen 2019-11-17
  • 打赏
  • 举报
回复
请教下,我也遇到了一样的问题,你这去年的帖子了,当时是怎么解决的呢,我觉得可能是服务器配置的问题,但是还没找到
salmonl 2018-12-20
  • 打赏
  • 举报
回复
补充,通过php://input方式来接收,发现也接收不到

var_dump(file_get_contents("php://input"));
salmonl 2018-12-20
  • 打赏
  • 举报
回复
多谢了
引用 9 楼 下雨的声音丶 的回复:
一样没问题
salmonl 2018-12-20
  • 打赏
  • 举报
回复
在仿真机测试curl 并且不在header中设置Expect为空,提交18000个字符PHP $_POST也能接收到,应该能排除curl本身的问题 curl 'http://i.niliu.me/xx/xxx' -d 'salmonlqqqqqqqqqqq...' -x '仿真ip:端口' 参数计数通过这个工具:http://www.eteste.com/
引用 5 楼 xuzuning 的回复:
你怎么就能认定不是 curl 命令的问题呢?
下雨的声音丶 2018-12-20
  • 打赏
  • 举报
回复
一样没问题
salmonl 2018-12-20
  • 打赏
  • 举报
回复
帮忙用curl请求看下效果哈
引用 7 楼 下雨的声音丶 的回复:
完全没问题
下雨的声音丶 2018-12-20
  • 打赏
  • 举报
回复
完全没问题
salmonl 2018-12-20
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
你怎么就能认定不是 curl 命令的问题呢?
请求的时候测试了在header中设置Expect为空,也依旧传递不过去。

curl 'http://i.niliu.me/xx/xxx'  -d 'salmonlqqqqqqqqqqq' -H 'Expect:'
另外同事通过postman提交测试也是一样的问题
xuzuning 2018-12-20
  • 打赏
  • 举报
回复
你怎么就能认定不是 curl 命令的问题呢?
salmonl 2018-12-20
  • 打赏
  • 举报
回复
参考文章,没有结果,http://www.111cn.net/phper/31/61219.htm
salmonl 2018-12-20
  • 打赏
  • 举报
回复
补充如下php.ini信息,另外仿真环境可以接收,线上接收不到,仿真环境和线上php.ini配置对比一致。以下信息仿真环境和线上输出也一致

echo ini_get('file_uploads') . "\n";   

echo ini_get('max_input_time') . "\n";   

echo ini_get('max_execution_time') . "\n";   

echo ini_get('post_max_size') . "\n";   

echo ini_get('upload_max_filesize') . "\n";   

echo ini_get('memory_limit') . "\n"; 
1 60 30 8M 5M 256M
salmonl 2018-12-16
  • 打赏
  • 举报
回复
引用 1 楼 qq_34494805 的回复:
重新弄环境吧,肯定是哪里配置错 了,默认的lnmp 环境就能发送post 50M
线上环境,Docker中,不方便轻易重装
qq_34494805 2018-12-16
  • 打赏
  • 举报
回复
重新弄环境吧,肯定是哪里配置错 了,默认的lnmp 环境就能发送post 50M

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧