我有一个相对较高的流量网站,大约每天一次会生成错误消息:
PHP警告:未知:输入变量超过1000.要增加php.ini中的限制更改max_input_vars。在第0行的未知中
我的猜测是,它是由一些已找到永远不会结束的URL链接结构的爬虫引起的。但是,我在访问日志中找不到任何问题(例如,带有1000多个get参数的url)。
有一种简单的方法可以深入了解此警告吗?它发生在任何PHP脚本加载之前,所以我认为不可能用php进行内省。如果我有简单的详细信息,例如URL,那么很容易解决。
答案 0 :(得分:1)
如果它只是偶尔发生并且可能也会影响最终用户,那么just raise the limit实际上是相当安全的 - 这是出于实际原因而限制可能的攻击的限制。
实际上,为了调试这个,我会深入研究边缘情况。在现实世界的场景中,我确实希望只有当某些东西无限期嵌套时才会出现这个错误。我会在代码中的某处插入一个小的检测脚本,例如:
function detectLargeInputs($name, $array)
{
if(count($array) > 500)
mail('mymail@domain.tld', 'Large input in '.$name,
print_r($array, true).print_r($_SERVER, true));
}
detectLargeInputs('GET', $_GET);
detectLargeInputs('POST', $_POST);
detectLargeInputs('COOKIE', $_COOKIE);
这应该会在一天内显示问题,包括同时包含$_SERVER
和REQUEST_URI
等字段的HTTP_REFERER
信息,这些信息可以帮助您准确找出问题。
答案 1 :(得分:0)
注意!如果输入变量在子数组中,则此检测不会发出警报: 数组 ( [foo] => 100 [bars] =>数组 ( [0] => 1111 [1] => 1111 ...(超过1000) ) )
'count'的返回值为2,一切似乎正常,但是PHP无法处理子数组中超过1000个值。