PHPIN.NET

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

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

[复制链接]

469

主题

31

回帖

5509

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5509
发表于 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.94 KB, 下载次数: 432)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-27 00:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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