【问题标题】:URL GET variable disappearURL GET 变量消失
【发布时间】:2019-07-22 09:16:56
【问题描述】:

我有一个简单的页面来打印数据库中的一些数据。 我使用 php GET 变量,(我知道它已被弃用,但它在本地网络上工作)。

它运行良好,但如果 'valami' 长度更大,则 'valami' 变量消失。当长度为1061时不起作用

在php.ini中:

max_input_vars=3000

查询字符串末尾的aid 变量是否也会被我的代码看到?所以这似乎不是查询字符串长度问题。

有什么问题?

PHP5

print_fizet.php?valami=28925|28926|28927|28928|28929|28930|28931|28932|28933|28934|28935|28936|28937|28938|28939|28940|28941|28942|28943|29055|29056|29057|29058|29059|29060|29061|29062|29073|29074|29075|29076|29077|29078|29079|29080|29092|29094|29095|29096|29097|29098|29099|29100|29101|29102|29103|29104|29105|29106|29107|29108|29109|29110|29111|29125|29142|29143|29144|29145|29146|29150|29151|29152|29168|29169|29170|29171|29172|29173|29174|29175|29176|29177|29178|29179|29180|29181|29182|29183|29184|29185|29186|29187|29188|29189|29190|29191|29192|29193|29194|29195|29196|29197|29198|29199|29200|29201|29202|29203|29204|29205|29206|29207|29208|29209|29210|29211|29212|29213|29230|29231|29232|29259|29260|29264|29265|29270|29281|29291|29292|29299|29300|29301|29303|29318|29339|29345|29346|29347|29348|29349|29350|29351|29352|29353|29360|29361|29367|29368|29369|29370|29371|29385|29386|29387|29388|29408|29409|29410|29411|29412|29413|29434|29435|29436|29490|29491|29508|29519|29523|29524|29525|29526|29527|29533|29534|29535|29545|29546|29547|29548|29549|29550|29551|29552|29554|29581&aid=23

更新

当我做一个

var_dump($_GET); 

输出是

array(1) { 
    ["aid"]=> string(2) "23" 
}

我得到的只是查询字符串末尾的变量

当我制作一个较短的 valami 变量时它可以工作:

array(2) { 
    ["valami"]=> string(509) "29197|...|29581" 
    ["aid"]=> string(2) "23" 
} 

【问题讨论】:

  • 你能告诉我们你的php代码吗?否则我们只能猜测,这不是很有帮助。
  • 只有代码:var_dump($_GET);输出:array(1) { ["aid"]=> string(2) "23" }
  • 当查询字符串短很多并且似乎可以工作时,您能告诉我们var_dump($_GET)
  • 如果对管道字符进行 urlencode 会发生什么? | => %7C

标签: php uri


【解决方案1】:

您似乎达到了 GET 变量的最大长度限制 - 可能是 1024。这很可能是由于您使用的 PHP 版本。我在 php.net 上找到了可能对您有用的注释: https://www.php.net/manual/en/reserved.variables.get.php#101469

【讨论】:

  • 我找不到答案。默认情况下,它不是您可以在 ini 文件中更改的内容。我也找不到任何关于哪个 PHP 版本支持哪个长度的线索,但我想如果你升级你的 PHP 版本,你会得到更好的结果。无论哪种方式,使用这种长度的 GET 变量可能会被视为一种不好的做法,因为这样的限制(甚至在某些边缘情况下甚至是浏览器限制),所以我宁愿建议更改为 POST。
  • 好的,伙计们!解决方案:将 suhosin.get.max_value_length 更改为 3000(默认值 512)并完美运行。谢谢大家的帮助
【解决方案2】:

您可以根据需要将 max_input_vars 长度从 1000 更新为 3000 等等。试试下面的代码来增加输入变量的长度。把这个代码放在脚本的开始处。

ini_set('max_input_vars', 3000);

希望对你有帮助。

【讨论】:

  • 嗨希瓦姆!现在的变量是3000。url(aid)末尾的变量是有效的,所以我认为不是url的长度问题
  • 这显然不是这里的相关设置。这个的默认值是 1,000,因为我们在这里只处理 两个 参数,所以将它增加到 3,000 当然不会有任何效果。此设置是关于接受参数的数量,而不是它们的长度。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 2017-12-10
  • 2022-01-20
相关资源
最近更新 更多