【问题标题】:Max size of URL parameters in _GET_GET 中 URL 参数的最大大小
【发布时间】:2011-12-05 04:09:45
【问题描述】:

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

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

【问题讨论】:

  • GET 请求的最大长度通常在 2k 左右。
  • 谢谢,但我需要知道的是 PHP 中单个 GET 参数的最大长度。

标签: php


【解决方案1】:

好吧,好像有些版本的PHP有GET参数长度的限制:

请注意,安装了 suhosin 补丁的 PHP 设置将具有 获取参数的默认限制为 512 个字符。虽然不好 实践中,大多数浏览器(包括 IE)最多支持 2000 左右的 URL 字符,而 Apache 的默认值为 8000。

要使用 suhosin 添加对长参数的支持,请添加 suhosin.get.max_value_length = <limit> in php.ini

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

【讨论】:

  • 哎呀,被一些重要数据刺痛了!谢谢,这解决了我的问题。
  • 我可以拥抱你。使用表单集成从 Sage Pay 返回的 800+ char crypt 查询参数根本不会被我们的 checkout_process 处理程序接收,导致它显示相当无用的消息“无法授权卡!”。仅供参考,我发现将php_value suhosin.get.max_value_length 2000 添加到.htaccess 不起作用,我必须将suhosin.get.max_value_length=2000 添加到php.ini 的[suhosin] 部分(并重新启动httpd)才能使更改生效。突然,我的长密码查询参数被接收、处理,并且卡支付再次工作。
  • 哇,非常感谢。这实际上也是我们的问题。最糟糕的是,没有任何日志可以说明为什么会发生这种情况。最后我很确定这是由于 GET 长度,但我无法确定它到底是什么。
【解决方案2】:

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

在 PHP 中不能更改 url 的长度。 链接的问题是关于 URL 大小限制的,你会找到你想要的。

【讨论】:

  • 网址没问题,查询字符串什么都有。 _GET 中没有显示的只是这一个参数(超过 512 个字符)。
  • @alexinblue 也许这个变量的值有一些特殊符号。您是否使用urlencode() 作为值?
  • @Geoffroy 如前所述,我正在使用 REST:GET 请求非常方便,我不愿意更改它。链接的文章谈到了 IE8 中大约 2000 - 4000 个字符的实际限制;旧浏览器不是问题。
  • @alexinblue 也许你是对的。我做了自己的测试,我得到一个 GET 参数值的最大长度是 512 字节。
  • @alexinblue 顺便说一句,它显然不能解决这个特殊问题,但我只想说你错了,说 PHP 正在后台转换所有内容。您应该始终使用urlencode 获取参数值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2021-04-14
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多