【问题标题】:parse_str syntax errors after upgrading from PHP 7.4 to 8.0 [duplicate]从 PHP 7.4 升级到 8.0 后的 parse_str 语法错误 [重复]
【发布时间】:2021-09-29 04:37:13
【问题描述】:

更新到 PHP8 后,我的网站开始崩溃并出现错误

PHP 消息:PHP 致命错误:未捕获的 ArgumentCountError:parse_str() 只需要 2 个参数,给定 1 个

我相信 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.net/manual/en/function.parse-str.php,尤其是在上面写着:8.0.0 result is no longer optional.。将$url_vars 移动到函数内部,因为函数不返回任何内容。

标签: php php-8


【解决方案1】:

从 PHP 8.0 开始,第二个参数 result 不再是可选的,而是必需

result 应该是您想要将输出放入的变量。

您可以在official parse_str documentation 上查看更新日志。

parse_str($parse_url['query'] ?? 0, $url_vars);

【讨论】:

    猜你喜欢
    • 2023-01-23
    • 1970-01-01
    • 2021-03-21
    • 2021-08-17
    • 2020-10-29
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多