帝国cms400万文章首页高效率调用代码

由于我服务器配置比较差,所以利用sql的rand()来随机肯定不行,太慢了,所以我转换思路,先建张表,字段分两个,一个是文章id一个栏目id,再通过这个表来进行区域性随机,这样就可以把随机高效率实现了,但是这样有个问题,用sql不靠谱,所以我写了一个PHP代码,经过测试,首页能在两秒内加载出来,但是老是随机不好,所以我又用了我的缓存插件来对页面进行固定….这都是后事了

<?php
$file_cache = "./news.json";
//缓存整个news表的数据
if(!file_exists($file_cache) || time()-filemtime($file_cache)>86400){
    //查询分类
    $hm_class=$empire->query("select classid from {$dbtbpre}enewsclass");   
    while($hm_r=$empire->fetch($hm_class))
    {
        //查询分类下面的所有id
        $hm_news=$empire->query("SELECT id FROM `{$dbtbpre}ecms_news` WHERE `classid` = {$hm_r[classid]}");   
        while($hm_nr=$empire->fetch($hm_news))
        {
            $news_data[$hm_r['classid']][] = $hm_nr[id];
        }
    }
    file_put_contents($file_cache,json_encode($news_data));
}
//获取缓存数据表
$file_arrs = json_decode(file_get_contents($file_cache),true);
//根据数据表获取id
foreach($file_arrs as $k=>$v){
    //增加变量
    for ($rani=1; $rani<=30; $rani++){
        $rand_id.= $v[mt_rand(0,count($v)-1)].",";    
    }
    $rand_id = rtrim($rand_id,",");
    $rand_data[] = $rand_id;
    $rand_id = "";
    $rani=1;
}
?>

写了两天,想来想去,最后测试了很久,才写成这样,如果服务器配置还是太小了,可以尝试将缓存文件给切分来调用,当然,这就需要你们再次而开了。
代码使用,先在首页模板最上面把PHP代码放上去,接下来就可以直接万能标签调用了

[ecmsinfo]1,20,32,1,0,13,0,"id in ($rand_data[0])"[/ecmsinfo]
[ecmsinfo]2,20,32,1,0,13,0,"id in ($rand_data[1])"[/ecmsinfo]
[ecmsinfo]3,20,32,1,0,13,0,"id in ($rand_data[2])"[/ecmsinfo]

比如这样调用,不懂PHP的,就先了解一下PHP语法先。可以找我改进代码哦!

© 版权声明
THE END
喜欢就支持一下吧
点赞7
评论 抢沙发

请登录后发表评论

    暂无评论内容