我的家用PC的端口8080上有用于nginx + php-fpm的docker容器。Nginx通过FCGI和PHP-FPM代理对PHP脚本的请求。
它侦听带有名为data
的POST字段的请求,并由JSON解码数组组成。为了进行测试,我使用了1552个字符长的JSON字符串。
当我使用本地机器的PHP cUrl发出请求时,例如http://localhost:8080/path/on/site
成功在我的PHP应用程序中获得了data
字段。
但是!如果我使用完全相同的PHP cUrl脚本从远程PC发出请求,但IP地址(http://myhomePcIp:8080/path/on/site
)除外-我什么都没得到。
在nginx的访问日志中,我得到了:
remoteIp - - [26/Jun/2018:04:07:55 +0000] "POST /path/on/site HTTP/1.1" 408 25 "-" "-"
在php-fmp方面,我根本没有任何要求。
修整data
字段的长度后,我得到了成功的结果,长度为1289个字符,但是1290个字符完全破坏了请求。
以下是PHP脚本:
<?php
$c = curl_init();
$opts = array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'http://myHomePcIP:8080/path/on/site',
CURLOPT_POSTFIELDS => array("data" => '<LONG JSON STRING>')
);
curl_setopt_array($c, $opts);
var_dump(curl_exec($c));
答案 0 :(得分:0)
从您的描述看来,php cURL是问题的根源。我建议您在php.ini
运行时文件中检查以下标志
max_input_vars
可以接受多少个输入变量(限制分别应用于$ _GET,$ _ POST和$ _COOKIE超全局变量)。 [Default = 1000]
post_max_size
设置允许的帖子数据的最大大小。此设置还会影响文件上传。 [Default = 8M]
将它们设置为以下属性
post_max_size = 8M
max_input_vars = 2000
如果您要处理更大的json数据包,则可以增加max_input_vars
。
PS:启用php日志可能很有用: