Php 查询变量不能超过512个字符

Php 查询变量不能超过512个字符,php,suhosin,Php,Suhosin,我正在努力读取$\u GET数组中包含超过512个字符的查询变量。但是,如果我使用parse_string解析查询字符串,我可以从结果数组中很好地读取它 例如: # GET /test.php?foo=<string with 513 characters>&bar=bar HTTP/1.1 <?php var_dump($_GET['foo']); # NULL var_dump($_GET['bar']); # "bar" parse_str($_SERVER[

我正在努力读取
$\u GET
数组中包含超过512个字符的查询变量。但是,如果我使用
parse_string
解析查询字符串,我可以从结果数组中很好地读取它

例如:

# GET /test.php?foo=<string with 513 characters>&bar=bar HTTP/1.1

<?php
var_dump($_GET['foo']); # NULL
var_dump($_GET['bar']); # "bar"

parse_str($_SERVER['QUERY_STRING'], $output);
var_dump($output['foo']); # <string with 513 characters>
?>
#GET/test.php?foo=&bar=bar HTTP/1.1

这对我来说毫无意义,因为
$\u GET
在内部使用
parse\u str
从查询字符串派生查询变量。我遗漏了什么吗?

有一个PHP错误报告

获取值超过512个字符的参数不会显示在中 $\u GET和$\u请求数组。升级到之后,我们注意到了这一点 5.3.1


上面说是苏霍辛造成了这种行为。

我不确定苏霍辛为什么会施加这种限制。谢谢你的帮助@约翰尼斯,不客气。这可能是为了防止某种类型的溢出攻击。解决这一问题的明显方法是使用POST而不是GET。@Spudley:POST应该只用于非幂等请求。我将“Suhosin”添加到标记列表中,因为它似乎是罪魁祸首。尽管使用GET而不是POST可能有很好的理由。我是说这是一种变通办法,而不是解决办法。@Spudley:那样的话,你是对的。;-)