WPJAM报错preg_split(): Passing null to parameter #2 ($subject) of type string is deprecated

WPJAM在PHP8.1中报错,提示

preg_split(): Passing null to parameter #2 ($subject) of type string is deprecated

查阅后发现,PHP 8.1 引入了一个变更,导致向 preg_split() 函数的第二个参数 $subject 传递 null 会引发警告。这是为了强制要求参数 $subject 是一个字符串类型,而不接受 null

WPJAM报错preg_split(): Passing null to parameter #2 ($subject) of type string is deprecated排查了函数,是这里的问题

wp_parse_id_list()
wp-content/plugins/wpjam-basic/includes/class-wpjam-api.php:674

但是看到包含第674行的方法,没有看到任何与wp_parse_id_list()有关的东西,也没发现有什么问题,如下所示。

private function sanitize_value($value){
        if($this->sanitize_callback){
            if(is_callable($this->sanitize_callback)){
                return call_user_func($this->sanitize_callback, $value);
            }
        }else{
            if($this->type == 'int' && !is_null($value)){
                return (int)$value;
            }
        }

        return $value;
    }

由于之前研究了WPJAM机器人的函数回复(WPJAM微信机器人如何使用自定义函数回复?),这时敏锐地发现这里有个call_user_func(),那么有可能是$this->sanitize_callback这个的问题,这个方法可能调用了wp_parse_id_list(),所以当$valuenull时,导致整体报错。于是继续往下看$this->sanitize_callback,并没有发现什么问题。

于是不再找了,尝试给$value加个判断,果然问题好了,看来就是这儿的问题,如下所示,这个小坑太费劲了。

public function sanitize_value($value) {
        if ($this->sanitize_callback) {
            if (is_callable($this->sanitize_callback)) {
                if (!is_null($value)) {
                    return call_user_func($this->sanitize_callback, $value);
                }
            }
        } else {
            if ($this->type == 'int' && !is_null($value)) {
                return (int)$value;
            }
        }
    
        return $value;
    }

 

本文作者:𝙕𝙆𝘾𝙊𝙄

文章名称:WPJAM报错preg_split(): Passing null to parameter #2 ($subject) of type string is deprecated

文章链接:https://www.zkcoi.com/365up/program/2729.html

本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
𝙕𝙆𝘾𝙊𝙄𝙕𝙆𝘾𝙊𝙄
上一篇 2023年8月4日 上午8:55
下一篇 2023年8月13日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

私聊博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

分享本页
返回顶部