2011-10-11 59 views
39

我正在使用REST访问PHP服务器:所有数据作为URL参数在GET请求中传递。其中一个参数在query_string中到达服务器,但它不在_GET全局中。但缩短参数(截止值似乎大约为512个字符)可以让它通过。_GET中URL参数的最大大小

假设我已经正确诊断问题,有没有办法改变这个最大尺寸?我没有在文档中找到任何解释,甚至没有提到这个限制。这是Debian squeeze/Apache 2.2.16/PHP 5.3.3。

+0

GET请求的最大长度通常在2k左右。 –

+1

谢谢,但我需要知道的是PHP中单个GET参数的最大长度。 – alexfernandez

回答

65

好吧,似乎某些版本的PHP有GET则params的长度的限制:

请注意安装了了Suhosin补丁PHP的设置将有 的512个字符的GET参数的默认限制。虽然坏 实践中,大多数浏览器(包括IE)支持的URL高达约2000 字符,而阿帕奇有8000

默认添加与长了Suhosin参数的支持,在php.ini

添加 suhosin.get.max_value_length = <limit>

来源:http://www.php.net/manual/en/reserved.variables.get.php#101469

+1

它的工作原理,谢谢! – alexfernandez

+1

oooch,在一些重要数据上被这个刺痛了!谢谢,这解决了我的问题。 – artfulrobot

+0

我可以拥抱你。从Sage Pay使用Form集成返回的800+ char''crypt''查询参数不会被我们的checkout_process处理程序接收,从而导致它呈现相当无用的消息“卡无法被授权!”。仅供参考我发现加入''php_value suhosin.get.max_value_length 2000''到.htaccess不起作用,我不得不将''suhosin.get.max_value_length = 2000''添加到php的''[suhosin]'部分。 ini(并重新启动httpd)以使更改生效。突然之间,我的长查询参数被接收,处理,卡支付再次运行。 – Neek

0

What is the maximum length of a URL in different browsers?

URL的长度不能在PHP中被改变。 链接的问题是关于URL的大小限制,你会发现你想要的。

+0

URL很好,查询字符串包含所有内容。这只是一个参数(超过512个字符),它不会出现在_GET中。 – alexfernandez

+0

@alexinblue也许这个变量的值有一些特殊符号。你使用'urlencode()'作为值吗? – Karolis

+0

@Geoffroy如上所述,我正在使用REST:GET请求非常方便,我不想改变它。链接的文章讲述了IE8中约2000-4000个字符的实际限制;旧的浏览器不是问题。 – alexfernandez