You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GLPI 10.0.3中PlanningExternalEvent.php第160行strlen报错求助

GLPI 10.0.3 计划模块 strlen() 错误修复方案

问题描述

计划模块触发如下PHP警告:

Warning: strlen() expects parameter 1 to be string, array given in C:\wamp64\www\glpi\src\PlanningExternalEvent.php on line 160

当前第160行代码为:

$is_rrule = strlen($this->fields['rrule']) > 0;

尝试将判断条件改为strlen($this->fields['rrule']) > 1后,问题仍未解决。

问题根源

错误本质是$this->fields['rrule']的值为数组类型,但strlen()函数仅能接收字符串参数,调整长度阈值无法解决类型不匹配的核心问题。

修复方案

根据rrule字段的实际业务存储逻辑,选择以下任一方案修改代码:

方案1:类型检查+多场景判断

先判断变量类型,分别处理字符串和数组的非空验证:

$rrule = $this->fields['rrule'];
$is_rrule = is_string($rrule) ? strlen($rrule) > 0 : (!empty($rrule) && is_array($rrule));

注:数组判断部分可根据业务需求调整,比如检查数组是否包含有效元素。

方案2:统一转为字符串处理(适用于数组为序列化/JSON结构的场景)

若rrule数组是结构化数据(如JSON或序列化格式),可先转为字符串再判断长度:

$rrule_str = is_array($this->fields['rrule']) ? json_encode($this->fields['rrule']) : $this->fields['rrule'];
$is_rrule = strlen($rrule_str) > 0;

方案3:简化非空判断(兼容字符串/数组)

若原逻辑仅需判断rrule是否有值,可直接使用empty()函数兼容多种类型:

$is_rrule = !empty($this->fields['rrule']);

注:empty()会将空字符串、空数组、null等视为“空”,需确认是否符合业务中“存在重复规则”的判定标准。

内容的提问来源于stack exchange,提问作者Bibi007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:15:46