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 。
排查了函数,是这里的问题
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(),所以当$value为null时,导致整体报错。于是继续往下看$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;
}
本文作者:ZKCOI
文章名称:WPJAM报错preg_split(): Passing null to parameter #2 ($subject) of type string is deprecated
文章链接:https://www.zkcoi.com/365up/program/2729.html
本站资源仅供个人学习和交流,如若转载,请注明出处,详见《免责声明》。
微信扫一扫
支付宝扫一扫
