基于 ThinkPHP 3.2.3 的页面静态化功能的实现

PHP 的页面静态化有多种实现方式,比如使用输出缓冲(output buffering),该种方式是把数据缓存在 PHP 的缓冲区(内存)中,下一次取数据时直接从缓冲区中读取数据,从而避免了脚本的编译和访问数据库等过程;另一种方式是直接生成静态的 HTML 文件,使用文件读写函数来实现,一些内容不经常改动的页面可以使用静态页面,访客访问到的页面就是真实的 HTML 页面,一些常见的 CMS 会使用该种方法。

以第二种方法为例,参考 DedeCMS 5.7 的静态化功能,在 ThinkPHP 3.2.3 下实现该方法。由于 ThinkPHP 是单入口系统,而且每一个页面都要对应控制器中的某个方法,因此不能直接把静态文件的地址作为实际访问的地址,而是需要在控制器中以模版加载的方式读取静态文件。

首页静态化的实现

在 DedeCMS 5.7 中,可以生成静态的首页、栏目页和文章页。其中首页的生成在后台的“生成”栏目进行设置,包括模板的选择、首页静态文件的存放路径以及首页模式(使用动态首页还是静态首页),DedeCMS 还专门为首页的设置设计了一张表 dede_homepageset,包含的字段包括 templet(模板位置)、position(首页静态文件的路径)、showmod(首页模式),通过在后台进行设置与生成,来控制网站首页使用动态首页还是静态首页,用到的核心文件是 \dede\makehtml_homepage.php。

流程大致是:

① 在后台选择生成静态页面时,通过表单向 makehtml_homepage.php 发送请求,参数包括 dede_homepageset 的所有字段

② 根据传递参数中的 templet、position、showmod 更新 dede_homepageset 表

③ 如果 showmod 是使用静态,加载模板,把模板保存为静态文件。使用的方法是 fopen(),fwrite() 和 fclose(),非常简单

④ 生成了静态页面之后,访客访问的就直接是静态的 index.html,如果首页发生了改变,则手动在后台重新生成一下首页

在 ThinkPHP 中可以这样设计:

config.php

<?php
return array(
    //‘配置项‘=>‘配置值‘
    ‘INDEX_MOD‘=>1,//首页模式 0-动态模式 1-静态模式
    ‘INDEX_HTML_FILE‘=>__ROOT__.‘Application/Home/View/Index/index_html.html‘,//静态首页地址
);

/Application/Home/Controller/IndexController.php

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {

    //首页
    public function index() {
        if(1 == C(‘INDEX_MOD‘)) {
            //静态
            $this->display(‘index_html‘);
        } else {
            //动态
            $list = M(‘category‘)->select();
            $this->assign(‘list‘, $list);
            $this->display(‘index_php‘);
        }
    }

    //根据动态首页的内容生成静态页面
    public function makehtml_homepage() {
        $homepage = ‘http://‘.$_SERVER[‘HTTP_HOST‘].U(‘Home/Index/index_php‘);
        $content = @file_get_contents($homepage);
        file_put_contents(C(‘INDEX_HTML_FILE‘), $content);
    }

    //动态首页数据
    public function index_php() {
        C(‘INDEX_MOD‘, 0);
        $this->index();
    }
}

模版文件 /Application/Home/View/Index/index_php.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <volist name="list" id="vo">
        {$vo.cat_name}<br />
    </volist>
</body>
</html>

在执行 http://ServerName/Home/Index/makehtml_homepage ,即手动生成静态首页后,在 /Application/Home/View/Index/ 路径下生成了静态文件:index_html.html,根据配置文件中设置的 INDEX_MODE 为静态,访问 http://ServerName 实际访问的就是新生成的静态文件。

时间: 2024-08-09 10:30:31

基于 ThinkPHP 3.2.3 的页面静态化功能的实现的相关文章

Asp.Net MVC页面静态化功能实现二:用递归算法来实现

上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter 后来想到可以通过WebRequest获取html代码,然后采用递归算法来实现.基本实现思路如下: 通过WebRequest获取超链接地址返回的html代码,并保存:通过正则表达式匹配html代码中所有的超链接hr

一个做页面静态化的php类

<?phpnamespace Common;/* * * 功能:页面静态化的创建和删除 * 创建:当且仅当,一个页面需要被静态化并且还未静态化时. * 删除:当且仅当,一个页面存在静态化页面并且需要被重新静态化时. * * 作者:郭军周 * * 注 :本类基于ThinkPHP3.2,或者其他具有"单一入口且MVC模式"的其他php框架. * * 使用方式:在Controller的构造方法中获取其对象:在Controller的销毁方法里,用其对象的_static方法. * 例:XX

FreeMarker页面静态化入门

一.什么是页面静态化 在访问 新闻.活动商品等详情页面时,路径可以是xx[id].html,服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回 ---- 减 少 数 据 库 交 互 , 提 高 查 询 性 能. 二.使用技术Freemarker 在这里由于我是使用Struts2, 默认使用 freemarker 实现 自定义标签模板,项目导入 struts2 就已经导入freemarker jar 包 2.1:什么是Freemark

浅谈页面静态化

(本篇所述基于wamp集成环境而言,适合新手参考.当然,也欢迎大神们给予宝贵意见,谢谢!) 页面静态化,就是将php文件转换成html文件.当页面的数据要求的实时性不是很高的时候[换言之,数据的更新率不高时],使用页面静态化. 页面静态化可分为伪静态[URL地址重写].真正的静态文件[由php产生]. 说明:伪静态化并不是真实意义上存在的,其意义在于地址栏的美化.便于seo收录[对搜索引擎友好],不能提高页面的响应速度,也无法减少数据库请求的压力. 页面静态化的意义在于提高页面的响应速度,减少数

Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则.强大的功能.高效的渲染效率.详尽的帮助说明与不断的更新与维护.常见的前端模板引擎有: 常用的java后台模板引擎:jsp.FreeMarker.Velocity等. 请不要迷恋速度,为了推广的测试可能是片面的,好的模板引擎经得起时间考验,建议大家选择成熟的.常用的模板引擎.另外不管前后端的模板引擎

学习笔记 --- 缓存、动态页面静态化、网站优化

http://www.cnblogs.com/cs_net/archive/2011/03/17/1986620.html 一.缓存 缓存(Cache)技术在软件开发过程中有着广泛的用途, 它对提升软件性能和改善客户体验有很大帮助. 所谓缓存, 是指将那些经常重复的操作结果暂时存放起来, 在以后的执行过程中, 只要使用前面的暂存结果即可. 缓存技术在日常生活中随处可见, 就拿排队买票来说吧: 买票时需要先排队, 等轮到自己了, 再告诉售票员你需要买那里的票, 售票员查询完后告诉你有还是没有. 若

网站页面静态化详解

URL静态化 静态化一直以来都是最基本的seo要求之一,但近一两年seo行业对是否一定要做静态化有了一些观念上的改变. 为什么静态化 现在的网站绝大多数是数据库驱动,页面由程序实时生成,而不是其的在服务器上有一个静态html文件存在.当用户访问一个网址时,程序根据url中的参数调用数据库数据,实时生成页面内容.因此动态页面相对应的url原始状态也是动态的,包含问号.等号及参数,如下面这种典型论坛的url: 3w点website点com/viewthread.php?tid=1234&&pa

网站架构(页面静态化,图片服务器分离,负载均衡)方案全解析

网站架构(页面静态化,图片服务器分离,负载均衡)方案全解析 文章分类:综合技术 1.HTML静态化其实大家都知道,效率最高.消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法.但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态

freemark 页面静态化

1. 页面静态化是什么? 页面静态化有很多含义,在WEB开发中,静态网页一般理解为网站中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静态的,不支持数据的传递,可以防止SQL注入 ). 2. 为什么都要把页面静态化呢? 对于现在的互联网应用(Web Application)来说,动态页面是占有绝对高的地位的,正因为有了动态化,才有了现在互联网的丰富多彩,但是如同所有别的事实一样,好处往往都是有代价的.为了产生出动态的效果,每一次对页面