parse_str 从 PHP 7.4 升级到 8.0 后出现语法错误
parse_str syntax errors after upgrading from PHP 7.4 to 8.0
更新到 PHP8 后,我的网站开始崩溃并出现错误
PHP message: PHP Fatal error: Uncaught ArgumentCountError: parse_str() expects exactly 2 arguments, 1 given
我相信它在 php 8 语法中有一些变化,但我不确定。我以前用php 7.4
有问题的行是:
$url_vars = parse_str($parse_url['query'] ?? 0);
有问题的脚本部分如下:
if ( $referrer !== FALSE && $referrer !== '' && stripos($referrer, '://') )
{
$parse_url = parse_url($referrer);
$domain = $parse_url['host'];
$query = $parse_url['query'] ?? 0;
$dotdomain = '.'.$domain;
if ( strlen($parse_url['query'] ?? 0) >= 1 )
{
$url_vars = parse_str($parse_url['query'] ?? 0);
if (FALSE === empty($url_vars['q']))
{
$utm_keyword = $url_vars['q'] ?? 0;
}
}
更熟悉 php 8 的人能否看出上面代码中的任何明显错误?
从 PHP 8.0 开始,第二个参数 result 不再是可选的,而是 必需的。
result 应该是您要将输出放入的变量。
您可以在 official parse_str documentation 上查看更新日志。
parse_str($parse_url['query'] ?? 0, $url_vars);
更新到 PHP8 后,我的网站开始崩溃并出现错误
PHP message: PHP Fatal error: Uncaught ArgumentCountError: parse_str() expects exactly 2 arguments, 1 given
我相信它在 php 8 语法中有一些变化,但我不确定。我以前用php 7.4
有问题的行是:
$url_vars = parse_str($parse_url['query'] ?? 0);
有问题的脚本部分如下:
if ( $referrer !== FALSE && $referrer !== '' && stripos($referrer, '://') )
{
$parse_url = parse_url($referrer);
$domain = $parse_url['host'];
$query = $parse_url['query'] ?? 0;
$dotdomain = '.'.$domain;
if ( strlen($parse_url['query'] ?? 0) >= 1 )
{
$url_vars = parse_str($parse_url['query'] ?? 0);
if (FALSE === empty($url_vars['q']))
{
$utm_keyword = $url_vars['q'] ?? 0;
}
}
更熟悉 php 8 的人能否看出上面代码中的任何明显错误?
从 PHP 8.0 开始,第二个参数 result 不再是可选的,而是 必需的。
result 应该是您要将输出放入的变量。
您可以在 official parse_str documentation 上查看更新日志。
parse_str($parse_url['query'] ?? 0, $url_vars);