设为首页收藏本站

PHPIN.NET

 找回密码
 立即注册
查看: 1627|回复: 0

[函数] 帝国CMS灵动标签查询缓存(支持memcached缓存)

[复制链接]

374

主题

381

帖子

2558

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2558
发表于 2014-11-14 14:14:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
帝国CMS灵动标签缓存设置(支持memcached缓存)
本文关键字词:灵动标签,灵动标签缓存,帝国CMS缓存

本函数能实现灵动标签缓存功能, 使用方法:传入生成的灵动标签部分,缓存时间秒,缓存类型。其他部分和灵动标签一样的使用

Userfun.php代码:

  1. /****************帝国CMS灵动标签缓存*******************/
  2. function YL_User_Cache($bq,$expire=3600,$type='file'){
  3. global $empire,$public_r;
  4. if (!$type){
  5. $type=$public_r['add_cache'];
  6. }
  7. $expire=(int)$expire;
  8. $cmd5='yl_'.md5(serialize($bq));//yl_是缓存前缀
  9. $data=array();//返回的数组
  10. if($type=='file'){
  11. $cname=$cmd5.'.php';//缓存名称
  12. $cdir=ECMS_PATH.'d/Cache/'.esub(md5($cname),1).'/';//缓存路径
  13. $path=$cdir.$cname;//完整路径
  14. createDir($cdir);//创建文件夹
  15. $head="<?php if(!defined('InEmpireCMS')){exit();}?>";//安全头部
  16. if(file_exists($path) && time()-filemtime($path)<$expire){//读取缓存内容
  17. $filecont=str_replace($head, '', file_get_contents($path));
  18. $data=unserialize($filecont);
  19. }
  20. }elseif($type=='memcache'){
  21. $memcache = @memcache_connect('localhost', 11211);//连接memcache
  22. if ($memcache) {
  23. $ismemcache=1;
  24. $memdata=$memcache->get($cmd5);
  25. $data=unserialize($memdata);
  26. if($data){
  27. $memcache->close();
  28. }
  29. }
  30. }
  31. if(!$data){
  32. $bqno=0;
  33. $ecms_bq_sql=sys_ReturnEcmsLoopBq($bq[0],$bq[1],$bq[2],$bq[3],$bq[4],$bq[5]);
  34. if($ecms_bq_sql){
  35. while($bqr=mysql_fetch_array($ecms_bq_sql,MYSQL_ASSOC)){
  36. $bqsr=sys_ReturnEcmsLoopStext($bqr);
  37. $bqno++;
  38. $data[$bqno]=array('bqsr'=>$bqsr,'bqr'=>$bqr);
  39. }
  40. }
  41. if($type=='file'){
  42. file_put_contents($path, $head.serialize($data));//写入缓存文件
  43. }elseif($type=='memcache' && $ismemcache==1){
  44. $memcache->set($cmd5, serialize($data),FALSE,$expire);
  45. $memcache->close();
  46. }
  47. }
  48. return $data;
  49. }
  50. //检查并创建文件夹
  51. function createDir($path){
  52. if (!file_exists($path)){
  53. createDir(dirname($path));
  54. mkdir($path,0777);
  55. }
  56. }
复制代码


模版中使用:
  1. /*
  2. * 灵动标签查询缓存
  3. * 传入生成的灵动标签部分,缓存时间秒,缓存类型$type='file'为文件缓存,$type='memcache'为memcache缓存)
  4. * 模版中使用方法如下:
  5. */
  6. <?
  7. $shujv=YL_User_Cache(array(灵动标签代码),缓存时间,'缓存类型');//缓存时间为秒
  8. foreach($shujv as $k=>$v){
  9. ?>
  10. <li><a href="<?=$v[bqsr][titleurl]?>"><?=$v[bqr][title]?></a></li>
  11. <?
  12. }
  13. ?>
复制代码



例子1:(调用下载模型下的10条数据,并且使用memcache缓存)
  1. <?php
  2. $shujv=YL_User_Cache(array('download',10,21,0,'','plnum DESC'),10,'memcache');
  3. foreach($shujv as $k=>$v){
  4. ?>
  5. <li><a href="<?=$v[bqsr][titleurl]?>"><?=$v[bqr][title]?></a></li>
  6. <?
  7. }
  8. ?>
复制代码


例子2:(调用下载模型下的10条数据,使用文件缓存)
  1. <?php
  2. $shujv=YL_User_Cache(array('download',10,21,0,'','plnum DESC'),10,'file');
  3. foreach($shujv as $k=>$v){
  4. ?>
  5. <li><a href="<?=$v[bqsr][titleurl]?>"><?=$v[bqr][title]?></a></li>
  6. <?
  7. }
  8. ?>
复制代码


文件缓存生成于/d/Cache/下,如有需求自行修改为自己的。

更多使用请自行研究拓展。本函数仅作抛砖引玉。

更新日志:
2014/11/17 增加memcached缓存支持
2015/06/12 修复一些其他不兼容的BUG 更完美



附件下载:
灵动标签缓存设置(支持memcached缓存).txt (2.37 KB, 下载次数: 5)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|PHPIN.NET ( 冀ICP备00000001号 )|网站地图  

GMT+8, 2016-12-10 20:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表