如何解决致命错误:未捕获的 ArgumentCountError:parse_str() 需要 2 个参数,1 个给定我如何更新最新的 php 版本?
parse_str($_SERVER['QUERY_STRING']);
if ($m == ""){
$dateComponents = getdate();
$month = $dateComponents['mon'];
$year = $dateComponents['year'];
} else {
$month = $m;
$year = $y;
}
echo build_previousMonth($month,$year,$monthString);
// ... etc
解决方法
parse_str() 的原始实现 - 以及它经常使用的特殊方式 - 至少可以说是非常幼稚的。问题是,当没有第二个参数调用时,这个函数基本上允许污染本地符号表。以下是 CVE Vulnerability Description 的摘录:
(1) PHP、(2) Hardened-PHP 和 (3) Suhosin 中的 parse_str 函数, 在没有第二个参数的情况下调用时,可能允许远程攻击者 通过指定变量名和覆盖任意变量 要解析的字符串中的值。注意:不清楚这是否 是功能的设计限制或 PHP 中的错误,尽管它是 可能被视为 Hardened-PHP 和 Suhosin 中的错误。
这就是为什么省略第二个参数在 PHP 7.2 中被弃用并在 PHP 8.0 中完全删除的原因。因此,您需要重新实现此调用,以便将结果存储在变量中,而不是直接检查 $m
、$y
、...,而是检查存储在该变量中的关联数组的元素。
例如:
parse_str($_SERVER['QUERY_STRING'],$query);
if (empty($query['m'])) {
// no data passed
}
else {
$month = $query['m'];
// etc
}
作为旁注,我真的不知道为什么您甚至必须解析查询字符串,而不是直接使用 $_GET。
,对于parse_str()
需要两个参数,一个是输入,一个是输出
例如:
$QUERY_STRING = "first=value&second=scvalue";
parse_str($QUERY_STRING,$output_array)
这里的 $output_array
包含查询字符串数据作为关联数组,可以像参数名称一样访问 $first_val = $output_array['first']
请查看 parse_str()
文档 https://www.php.net/manual/en/function.parse-str.php
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。