tp3.23网站技术文件静态缓存,生成静态页面,计数器,定时操作生成静态页面和备份数据库

1,关于文件的静态缓存tp3有内置的F方法。
F方法他在公共函数库文件function.php里面
格式如下:

/**
 * 快速文件数据读取和保存 针对简单类型数据 字符串、数组
 * @param string $name 缓存名称
 * @param mixed $value 缓存值
 * @param string $path 缓存路径
 * @return mixed
 */
function F($name, $value='', $path=DATA_PATH) {
    static $_cache  =   array();
    $filename       =   $path . $name . '.php';
    if ('' !== $value) {
        if (is_null($value)) {
            // 删除缓存
            if(false !== strpos($name,'*')){
                return false; // TODO 
            }else{
                unset($_cache[$name]);
                return Think\Storage::unlink($filename,'F');
            }
        } else {
            Think\Storage::put($filename,serialize($value),'F');
            // 缓存数据
            $_cache[$name]  =   $value;
            return null;
        }
    }
    // 获取缓存数据
    if (isset($_cache[$name]))
        return $_cache[$name];
    if (Think\Storage::has($filename,'F')){
        $value      =   unserialize(Think\Storage::read($filename,'F'));
        $_cache[$name]  =   $value;
    } else {
        $value          =   false;
    }
    return $value;
}

后面文件名可不写,则默认缓存到ThinkPHP的运行文件夹Rutime的文件夹Data里面,可直接读取缓存信息
F(‘site_config’,data);//data);//生成缓存信息文件,data是表单提交过来的数据
data=F(siteconfig);//F(siteconfig,data = F('site_config');//读取缓存信息 若写上第三个参数也就是文件名,则读取缓存信息要加上相对路径 F('site_config',data,APP_PATH.‘Common/Conf/’);
$data = F(’…/…/Common/Conf/site_config’);

2,生成静态页面的buildHtml方法
buildHtml方法 在ThinkPHP框架文件夹controller.php文件里

/**
     *  创建静态页面
     * @access protected
     * @htmlfile 生成的静态文件名称
     * @htmlpath 生成的静态文件路径
     * @param string $templateFile 指定要调用的模板文件
     * 默认为空 由系统自动定位模板文件
     * @return string
     * protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
     */

它的使用也极其简单,以首页生成静态页面为例,有三个步骤:
(1),修改配置文件conf.php,开启静态生成文件后缀名为.html
‘HTML_FILE_SUFFIX’ => ‘.html’,//设置静态生成文件的文件名后缀为html
(2),设置在index.php设置HTML_PATH,如
define(‘HTML_PATH’,’./’);//此为生成首页静态页面的根目录
(3),gei首页index方法加个参数且默认为空,

 	index(type=''){
 		//写在方法末尾00000
		//当index方法参数为buildHtml是执行生成静态页面
		if(type=‘buildHtml’){
            $this->buildHtml('index',HTML_PATH,'Index/index');
		else {
            $this->display();
        }
    }
    //写个方法用来在后台手动控制生成静态页面
    public function build_html() {
        $this->index('buildHtml');
        $this->ajaxReturn('OK');
    }

3,生成静态页面还要解决用户操作信息及时反馈,即计数器及时更新静态页面的信息

(1),写前台模板,导入计数器文件
            <dd class="news-info">
              {$vo.keywords} <span>{$vo.add_time|date="Y-m-d H:i:s",###}</span> 阅读(<i news-id="{$vo.id}" class="news_count node-{$vo.id}">{$vo.count}</i>)
            </dd>
            <script src="__PUBLIC_HOME__/js/count.js"></script>
(2),计数器文件方法实现阅读时更新,与后台交互
/**
 * 计数器JS文件
 */

var newsIds = {};
$(".news_count").each(function(i){
    newsIds[i] = $(this).attr("news-id");
});

//调试
//console.log(newsIds);

url = "/index/getCount";

$.post(url, newsIds, function(result){
    if(result.status  == 1) {
        counts = result.data;
        $.each(counts, function(id,count){
            $(".node-"+id).html(count);
        });
    }
}, "JSON");

(3),后台操作方法

public function getCount() {
    if(!$_POST) {
        $this->ajaxReturn('没有任何内容');
    }

    $newsIds =  array_unique($_POST);

    try{
        $list = $this->getNewsByNewsIdIn($newsIds);
    }catch (Exception $e) {
        $this->ajaxReturn($e->getMessage());
    }

    if(!$list) {
        $this->ajaxReturn('没有数据');
    }

    $data = array();
    foreach($list as $k=>$v) {
        $data[$v['id']] = $v['count'];
    }
    $this->ajaxReturn(array('status'=>1,'data'=>$data));
}

4,定时执行任务生成静态页面和备份数据库
就是通过脚本定时执行生成静态页面和备份数据库的方法
(1),自动生成静态页面,定义常量标记是否为计划任务脚本,同样在根目录下的index.php入口文件中
define(‘APP_CRONTAB’, 1);
然后操作方法(写前台控制器那个从之前都行,比如index控制器)
在这里插入图片描述


    public function crontab_build_html() {
        if(APP_CRONTAB != 1) {//在index.php里面,
            die("the_file_must_exec_crontab");
        }
        $result = F('../../Common/Conf/site_config');
        if(!$result['cacheindex']) {//后台设置单选框name属性值,如
            **
            
                <label><input type="radio" name="cacheindex" value="1" <if condition="$data.cacheindex eq 1">checked</if>> 开启</label>
                <label><input type="radio" name="cacheindex" value="0" <if condition="$data.cacheindex neq 1">checked</if>> 关闭</label>
            */
            die('系统没有设置开启自动生成首页缓存的内容');
        }
        $this->index('buildHtml');
    }

(2),自动备份数据库,定义常量标记是否为计划任务脚本,同样在根目录下的index.php入口文件中
新建个cron.php类执行数据库备份任务

<?php
namespace Admin\Controller;
use Think\Controller;
use Think\Upload;

/**
 * 后台计划任务 业务脚本
 */
class CronController {
    public function dumpmysql() {
        $result = F('../../Common/Conf/site_config');
        if(!$result['dumpmysql']) {//后台设置单选框name属性值,如
        ?**
                <label><input type="radio" name="dumpmysql" value="1" <if condition="$data.dumpmysql eq 1">checked</if>> 开启</label>
                <label><input type="radio" name="dumpmysql" value="0" <if condition="$data.dumpmysql neq 1">checked</if>> 关闭</label>
		*/
            die("系统没有设置开启自动备份数据库的内容");
        }
        $shell = "mysqldump -u".C("DB_USER")." " .C("DB_NAME")." > /tmp/cms".date("Ymd").".sql";
        exec($shell);
    }
}

我们可以用命令行的形式启用这些定时任务,当然更简便方法是用宝塔面板执行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章