梦想之家

phpcms添加内容报错Fatal error: Allowed memory size of

在 phpcms使用php7.x环境下的时候,添加内容会发现分词的类会报错:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1553820982132152 bytes) in /phpcms/libs/classes/segment.class.php on line 347


是因为:/phpcms/libs/classes/segment.class.php 这个类文件里的变量引起的,查看了一下源码,发现是有个变量的定义类型有些问题,下面是报错函数的主要位置:

  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)0x80) continue;
      if(isset($wks[$w])) $wks[$w]++;
      else $wks[$w] = 1;
    }
    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;
        }
      }
    }
    if(CHARSET=='utf-8') $okstr = iconv('gbk','utf-8',$okstr);
    return trim($okstr);
  }


 可以看到上面 定义了两个变量  $okstr = $wks = ''; 这步看起来是没有什么问题,但是往下看就会发现 $wks 这个变量 使用的时候是以数组的形式使用的,这时候在php5.x的环境下没有发现什么问题,但是在切换到了php7.x之后会发现会报错内存溢出了;
解决办法就是直接把 $wks 这个变量定义成数组,这样即可修复php7.x环境下的报错问题;

  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 = array(); //修复 php7.x 环境 报错Fatal error: Allowed memory size of
    foreach($ws as $w) {
      $w = trim($w);
      if(strlen($w)0x80) continue;
      if(isset($wks[$w])) $wks[$w]++;
      else $wks[$w] = 1;
    }
    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;
        }
      }
    }
    if(CHARSET=='utf-8') $okstr = iconv('gbk','utf-8',$okstr);
    return trim($okstr);
  }


相关推荐

您此刻的心情: