• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    phpcms缓存使用总结(memcached、eaccelerator、shm)

    发布者: 涵韵 | 发布时间: 2025-7-24 16:14| 查看数: 17| 评论数: 0|帖子模式

    a.模板编译缓存
    参考文件include/global.func.php及include/template.func.php
    模板编译缓存的原理其实很简单,如果模板是第一次编译,则直接编译它,如果不是第一次编译,则比较模板文件($tplfile)及模板缓存文件 ($compiledtplfile)的修改时间,如果模板文件的修改时间大于编译过的模板缓存文件,则编译模板,否则不编译模板,提高了程序的执行效 率。
     
    代码如下:

    function template($module = 'phpcms', $template = 'index')
    {
    global $CONFIG;
    $compiledtplfile = $CONFIG['templatescachedir'].$module.'_'.$template.'.tpl.php';
    if($CONFIG['templaterefresh'])
    {
    $tplfile = PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/'.$module.'/'.$template.'.html';
    if(!file_exists($compiledtplfile) || @filemtime($tplfile) > @filemtime($compiledtplfile))
    {
    require_once PHPCMS_ROOT.'/include/template.func.php';
    template_refresh($tplfile, $compiledtplfile);
    }
    }
    return $compiledtplfile;

    b.在动态页面里面产生静态的缓存文件
    与c的缓存原理类似,只是此处生成的文件名相对固定
    以问吧模块为例进行说明
    用http://www.chf.com/opensource/phpcms2007_sp6_gbk/phpcms/wenba/进行访问
    此目录下有个index.php文件,判断当前目录下是否存在名为index_cache.html的文件,如果有没有过失效期,则直接包含此文件,否则动态地读取完数据后保存为index_cache.html文件,以备下次使用。
    文件index.php中的内容:
     
    代码如下:

     
    怎么判断文件是否失效呢,文件data/cache/wenba_setting.php中有如下的设置,其中字段autoupdate的值就是文件失效的时间,单位是秒,在后台可以进行设置
    文件wenba_setting.php是从哪儿来的呢,进行安装时自动把各种模块的数据保存到数据库中了,安装时就生成缓存数据了,在include/common.inc.php中函数cache_all也可以生成缓存,后台进行设置时cache会自动更新的
     
    代码如下:

     
    include/global.func.php
    更新模块设置函数
     
    代码如下:

    function module_setting($module, $setting)
    {
    global $db,$MODULE,$LANG;
    if(!is_array($setting) || !array_key_exists($module,$MODULE)) return FALSE;
    if(isset($setting['moduledomain']))
    {
    $moduledomain = $setting['moduledomain'];
    $db->query("UPDATE ".TABLE_MODULE." SET moduledomain='$moduledomain' WHERE module='$module'");
    unset($setting['moduledomain']);
    }
    $setting = addslashes(serialize(new_stripslashes($setting)));
    //将某个模块的多个设置的值经数组序列化以后保存在一个字段setting中
    $db->query("UPDATE ".TABLE_MODULE." SET setting='$setting' WHERE module='$module'");
    cache_module($module);
    cache_common();
    return TRUE;

    c.在动态页面里面产生静态的缓存文件

    与b的缓存原理类似,只是此处生成的文件名是根据计算$PHP_SELF与$PHP_QUERYSTRING的md5值生成的文件名,相对于所有php动态页面来说都是一样的,这个思想比较精典,值得借签
    以问吧模块为例进行说明
    文件调用顺序为:index.php -> js.php -> ad.php -> global.func.php
    用http://www.chf.com/opensource/phpcms2007_sp6_gbk/phpcms/wenba/进行访问
    此目录下有个index.php文件,判断当前目录下是否存在名为index_cache.html的文件,如果有,则直接包含此文件,如果不存在此文件,则动态地读取完数据后保存在index_cache.html文件,以备下次使用
    用上述的url访问时,页面里面包含有如下的一行js代码

    此js代码其实就是动态调用php页面的内容
    http://www.chf.com/opensource/phpcms2007_sp6_gbk/phpcms/data/js.php?id=1
    js.php文件的内容:
     
    代码如下:

     
    ad.php的内容:
     
    代码如下:

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

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