zoukankan      html  css  js  c++  java
  • uchome 缓存生成

    一。uchome的缓存目录 ---------data此目录要有777权限

    (1)模板文件缓存机制

    1:在要显示的页面通过include template($name) 语句来包含被编译后的模板文件

    2:template($name)函数解释

    3:模板文件编译:parse_template($tpl)

      传递的参数:为不包含文件类型后缀的完整文件路径

      函数功能:替换掉模板标签,使其编译成PHP代码

    (2)模块数据缓存

    1:管理员在后台可以设置是否进行模块缓存,以及文本模式缓存还是储存到数据库,同时还可以设置时储存到一个表还是多个表中。

    若选在储存在数据库中,则被保存于cache cahe1 chae2 这些表中,若储存在文本中,则文本被存放于/data/block_cache 中。

    2:设置数据被储存在config表中,一键值对的形式储存 

    3:所有模块缓存的更新周期是在代码中事先设定好的不能设置的,只能通过后台手动一次性的更新模块缓存,

    4:当手动更新缓存之后,通过block_data_cache();函数进行缓存更新,也就是清除所有模块缓存

    (3)模块缓存

    1:在后台数据调用功能处设置添加模块

    2:之后会生成一个模块调用代码

    3:模块数据被储存在block表中

    (4)系统配置缓存

    1:管理员在后台设置好系统配置

    2:数据被写入config表中 ,一键值对的形式存储

    3:在common.php文件中,检测系统配置缓存文件dada_config.php是否存在,若存在则调用不存在则生成系统配置缓存文件。

    $_SCONFIG数组用来储存系统配置数据的。

    二。缓存文件是通过source/function_cache.php里的函数来生成的。例如

    //更新配置文件
    function config_cache($updatedata=true) {
        global $_SGLOBAL;
    
        $_SCONFIG = array();
        $query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('config'));
        while ($value = $_SGLOBAL['db']->fetch_array($query)) {
            if($value['var'] == 'privacy') {
                $value['datavalue'] = empty($value['datavalue'])?array():unserialize($value['datavalue']);
            }
            $_SCONFIG[$value['var']] = $value['datavalue'];
        }
        cache_write('config', '_SCONFIG', $_SCONFIG);
    
        if($updatedata) {
            $setting = data_get('setting');
            $_SGLOBAL['setting'] = empty($setting)?array():unserialize($setting);
            cache_write('setting', "_SGLOBAL['setting']", $_SGLOBAL['setting']);
    
            $mail = data_get('mail');
            $_SGLOBAL['mail'] = empty($mail)?array():unserialize($mail);
            cache_write('mail', "_SGLOBAL['mail']", $_SGLOBAL['mail']);
    
            $spam = data_get('spam');
            $_SGLOBAL['spam'] = empty($spam)?array():unserialize($spam);
            cache_write('spam', "_SGLOBAL['spam']", $_SGLOBAL['spam']);
        }
    }

    三。cache_write

    //写入
    function cache_write($name, $var, $values) {
        $cachefile = S_ROOT.'./data/data_'.$name.'.php';
        $cachetext = "<?php
    ".
            "if(!defined('IN_UCHOME')) exit('Access Denied');
    ".
            '$'.$var.'='.arrayeval($values).
            "
    ?>";
        if(!swritefile($cachefile, $cachetext)) {
            exit("File: $cachefile write error.");
        }
    }

     四。其他

    • config_cache() 更新配置信息缓存,生成缓存文件data_config.php
    • usergroup_cache() 更新用户组缓存,生成缓存文件data_usergroup.php
    • profilefield_cache() 更新用户栏目缓存,生成缓存文件data_profilefield.php
    • profield_cache() 更新群组栏目缓存,生成缓存文件data_profield.php
    • censor_cache() 更新词语屏蔽缓存,生成缓存文件data_censor.php
    • creditrule_cache() 更新积分规则,生成缓存文件data_creditrule.php
    • ad_cache() 更新广告缓存,生成缓存文件data_ad.php
    • task_cache() 更新用户向导任务,生成缓存文件data_task.php
    • block_cache() 更新模块,生成缓存文件data_block.php
    • tpl_cache() 更新模板缓存,清空模板缓存文件夹/data/tpl_cache/下所有文件使模板缓存重新生成
    • block_data_cache() 更新模块缓存,清空模板缓存数据使缓存重新生成
    • userapp_cache() 更新MYOP默认应用,生成缓存文件data_userapp.php
    • app_cache() 更新应用名,生成缓存文件data_app.php

    五。使用缓存

      从上面分析可看出,缓存数据文件其实就是php代码文件,直接引入执行。因而我们的缓存使用也就很方便了,只需将缓存文件使用

    include/include_once/require/require_once等函数引入进来即可使用,调用对应的变量来获取缓存的数据。

    但为了保证缓存的存在,使用时最好加一个检测;如果缓存数据不存在,则先生成一遍缓存数据。综合起来,缓存的代码参考如下:

    if(!@include_once(S_ROOT.'./data/data_usergroup.php')) {
        include_once(S_ROOT.'./source/function_cache.php');
        usergroup_cache();
    }

     http://localhost/uchome/invite.php?u=3&c=f1afb01b1ca3808c

  • 相关阅读:
    SQL Server DB 基于多核CPU的设置
    如何在64位的Windows 2008的系统配置导入Excel功能
    如果在IIS中没有将虚拟目录配置为应用程序,则可能导致此错误
    .NET 数据绑定中空格符的问题
    .net 读取客户端文件的方法
    spring4+quartz
    web端 图片上传
    Maven配置setting.xml详细说明
    Timer
    实现quartz定时器及quartz定时器原理介绍
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3390184.html
Copyright © 2011-2022 走看看