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
相关产品推荐
相关产品推荐

