
正文
php返回数据截断 php返回字符串长度
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
记一次curl post请求数据被截断问题处理
通过linux curl 命令和php脚本的curl请求一个接口地址php返回数据截断,返回的json数据比较大,结果只获取到部分数据,并且linux curl终端还报php返回数据截断了个错,如下:
curl: (18) transfer closed with outstanding read data remaining
怀疑服务端有异常,查看nginx日志发现
nginx[warn]:an upstream response is buffered to a temporary
虽然是个warn,但出现问题的时候也一样要警示。
于在nginx.conf 的http 里加入如下一段:
加大buffer的配置,居然没管用
后经查,负载均衡采用的nginx反向代理,于是到nginx代理服务器上,http里加入如下一段:
问题解决。
分析:
Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在fastcgi_buffers中,如上配置
最大内存缓冲区大小是 8 * 128 + 4 = 1028K
当 Response的内容 小于等于 1028K 时,所有数据当然全部在内存中处理。如果 Response 大于 1028K ,多出来的数据会被临时写入到文件中,放在fastcgi_temp目录下面。此时会在看到类似如下 warning:
这个值太小,Nginx 会频繁读写硬盘,影响性能,太大也不好,会吃掉内存,所以根据实际Response的内容大小来定。
相关问答
Q1: php 如何判断“请求被截断”
方法2:getInput(String input),可以转化为代码request.getParmater(“input”),
由于字符串中包含了‘’字符,直接用postman进行投递时候,字符串会拦断【request.getParamater会以截断参数】。因此不能直接投递。可以将input的json字符串url enode后投递。
第二种方式,就是在postman中header中设置
key:content-type
value:application/json
在Body中设置json数据
然后在代码中指明接受为requestBody
参考一下
Q2: 前端提交大量数组至PHP后台,数据被截断
2019-05-14
当对象数组长度较大时,PHP后端获取的POST数据不完整
php.ini中max_input_vars 参数默认为1000 改为5000解决
也可使用JSON.stringify转换为JSON字符串传到后端,后端解析后再处理
关于php返回数据截断和php返回字符串长度的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







