如果长度> 1000000 个字符,则未设置 $_POST 键/值



这是我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"),
];

这是使用 cURLGuzzle(不使用 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 请求注册的变量的最大长度。

最新更新