升级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();

经过测试,此方法有效。

© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容