这是我POST
PHP脚本的一些数据。
$Data =
[
"Something" => "1",
"SomethingElse" => "2",
"More" => "3",
"Exactly1000000" => substr(file_get_contents("Data2MB.txt"), 0, 1000000),
"Exactly1000001" => substr(file_get_contents("Data2MB.txt"), 0, 1000001),
"About2MB" => file_get_contents("Data2MB.txt"),
];
这是使用 cURL
、Guzzle
(不使用 cURL(和通过 XMLHttpRequest
完成的。两者产生相同的结果。
发布到:
<?php
print_r($_POST);
?>
输出:
Array
(
[Something] => 1
[SomethingElse] => 2
[More] => 3
[Exactly1000000] => Z0vp2++85+y9wjFL... (very long random base64)
)
任何> 1000000 个字符的字符串值实际上都会消失,但如果目标脚本显示file_get_contents("php://input")
则存在
我设置了以下 PHP 参数:
max_execution_time 500
max_file_uploads 20
max_input_nesting_level 64
max_input_time 500
max_input_vars 10000
memory_limit 512M
post_max_size 240M
谁能告诉我发生了什么?
编辑:不,这不是一个重复的问题。我知道上限,这可能是巨大的。我的例子是只发送兆字节,PHP设置已被更改(上图(以创建足够的空间。由于某种原因,在我的服务器上根本看不到键/值。
我的猜测,您很可能在服务器上安装了 Suhosin - 它有一个限制 POST 参数值长度的设置,并且它恰好具有该值作为默认值:
https://suhosin.org/stories/configuration.html#suhosin-post-max-value-length:
suhosin.post.max_value_length
类型:整数
默认值:1000000
定义通过 POST 请求注册的变量的最大长度。