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); }
Dcr163的博客
http://dcr163.cn/398.html(转载时请注明本文出处及文章链接)