升级php7.1.*后phpcms V9编辑文章出错的解决方法

这两天服务器环境升级了php到7.1.*,然后使用phpcms V9添加或编辑文章时都会遇到500错误。查看error_log文件,看到一堆Illegal string offset '**' | phpcms/libs/classes/segment.class.php | 345这样的错误。查看segment.class.php 文件的345行,附近的代码是:

function get_keyword($str,$ilen=-1) {
 if($str=='') return '';
 else $this->split_result($str,true,true);
 $okstr = $this->result_string;
 $ws = explode(' ',$okstr);
 $okstr = $wks = '';
 foreach($ws as $w) {
 $w = trim($w);
 if(strlen($w)<2) continue;
 if(!preg_match("/[^0-9:-]/",$w)) continue;
 if(strlen($w)==2&&ord($w[0])>0x80) continue;
 if($wks=="") $wks=array();
 if(isset($wks[$w])) $wks[$w]++;
 else $wks[$w] = 1; //345行的内容
 }
 if(is_array($wks)) {
 arsort($wks);
 if($ilen==-1) {
 foreach($wks as $w=>$v) {
 if($this->get_rank($w)>500) $okstr .= $w." ";
 }
 } else {
 foreach($wks as $w=>$v){
 if((strlen($okstr)+strlen($w)+1)<$ilen) $okstr .= $w." ";
 else break;
 }
 }
 }

看来问题出在$wks这个变量上(字符串变量直接当数组使用)。查看前面的代码,$wks的赋值是:$okstr = $wks = ''; ,后来通过搜索得知:PHP7开始,对于数据类型的隐式转换做了调整,String无法隐式转换成Array了。

所以,问题就出在$wks一开始是字符串,后面的代码又直接把他当数组用,再新版PHP中就会出错。所以解决方法应该是在344行前面增加一行:if($wks=="") $wks=array();

经过测试,此方法有效。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

PHP开发过程的那些坑(二) ——PHP empty函数

PHP开发过程的那些坑(二)——PHP empty函数 (原创内容,转载请注明来源,谢谢) 坑: 在工作过程中,常用empty()函数判断数组是否为空,为空时返...

3858
来自专栏企鹅号快讯

Linux基础(五)

一、shell编程基础 1、shell编程 程序=指令+数据 编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell...

1908
来自专栏流媒体人生

linux eval

eval 就是执行以下两个步骤 1.第一次,执行变量替换,类似与C语言的宏替代

882
来自专栏DannyHoo的专栏

block和代理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1483
来自专栏不想当开发的产品不是好测试

生成唯一标识 字符串跟时间戳的结合

生成唯一标识 期望得到是一个时间戳跟字符串的组合, 采用 //这种是秒级的时间戳 Date date = new Date(); String.format...

3487
来自专栏kevindroid

java多线程——线程的状态

1783
来自专栏武军超python专栏

2018年7月23日数据存储到文件中的代码介绍:

******************************************************************

1075
来自专栏mwangblog

python模块

1593
来自专栏cloudskyme

什么是线程安全

什么是线程安全?       如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且...

3298
来自专栏决胜机器学习

Redis专题(四) ——Redis排序、消息队列、优化存储

Redis专题(四) ——Redis排序、消息队列、优化存储 (原创内容,转载请注明来源,谢谢) 一、排序 1、命令 SORTkey [A...

6198

扫码关注云+社区

领取腾讯云代金券