网站项目想做个队列, 能一直运行. 数据库操作已经写好了想直接套用think php的直接用.
然后发现一个坑, 只要执行model的find 内存就尼玛一直长.
然后追查:
是运行到解析join的时候出现的
在ThinkPHP/Lib/Core/Db.class.php 589行
protected function parseJoin($join) {
$joinStr = ”;
if(!empty($join)) {
if(is_array($join)) {
foreach ($join as $key=>$_join){
if(false !== stripos($_join,’JOIN’))
$joinStr .= ‘ ‘.$_join;
else
$joinStr .= ‘ LEFT JOIN ‘ .$_join;
}
}else{
$joinStr .= ‘ LEFT JOIN ‘ .$join;
}
}
//将__TABLE_NAME__这样的字符串替换成正规的表名,并且带上前缀和后缀
$joinStr = preg_replace(“/__([A-Z_-]+)__/esU”,C(“DB_PREFIX”).”.strtolower(‘$1’)”,$joinStr);
return $joinStr;
}
主要这句:
$joinStr = preg_replace(“/__([A-Z_-]+)__/esU”,C(“DB_PREFIX”).”.strtolower(‘$1’)”,$joinStr);
$joinStr=”;的时候内存就一直长啊!!
因为项目很少用join,这个服务也用不到join,在方法顶部增加:
if(empty($join)){
return ”;
}
然后终于妥当了.