文档章节

PHP实现页面静态化——全部纯静态化

梦梦阁
 梦梦阁
发布于 2017/05/08 11:24
字数 902
阅读 10
收藏 1

这里先介绍几个关于PHP缓冲区的相关函数:

ob_start 打开输出控制缓冲(要求php开启缓存,在php配置文件php.ini文件中可以设置 output_buffering = on)

ob_get_contents     返回输出缓冲区内容

ob_clean     清空(擦掉)输出缓冲区

ob_get_clean     得到当前缓冲区的内容并删除当前输出缓冲区

php生成文件的函数 file_put_contents('文件路径','文件内容'),(当然php中还有其他写文件的方法,如fwrite)

创建一个数据库的操作类 db.php

<?php   
/** 
 * 数据库连接封装 
*/  
class Db {  
     //存储类的实例的静态成员变量  
     private static $_instance;  
     //数据库链接静态变量  
     private static $_connectSource;  
     //连接数据库配置  
     private $_dbConfig = array(  
          'host'     => '127.0.0.1',  
          'user'     => 'root',  
          'password' => '',  
          'database' => 'mooc_cms'  
     );  
     private function __construct() {}  
     /** 
     * 实例化 
     */  
     public static function getInstance() {  
         //判断是否被实例化  
         if(!(self::$_instance instanceof self)) {  
            self::$_instance = new self();  
         }  
         return self::$_instance;  
     }  
     /** 
      * 数据库连接 
     */  
     public function connect() {  
        if(!self::$_connectSource) {  
           //数据库连接  
           // @ 符号可以取消警告提示  
           self::$_connectSource =
@mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);  
           if(!self::$_connectSource) {  
              //抛出异常处理  
              throw new Exception('mysql connect error ');  
           }  
           //选择一款数据库  
           mysql_select_db($this->_dbConfig['database'], self::$_connectSource);  
           //设置字符编码  
           mysql_query("set names UTF8", self::$_connectSource);  
        }  
        //返回资源链接  
        return self::$_connectSource;  
     }  
}  
?>  

 index.php (根据静态文件失效的时间,判断是否重新生成静态文件 index.shtml)

    <?php   
        //1、连接数据库,然后从数据库里面获取数据  
        //2、把获取到的数据填充到模板文件里面  
        //3、需要把动态的页面转化为静态页面,生成纯静态化文件  
        if(is_file('index.shtml') && (time() - filemtime('index.shtml')) < 300) { //设置缓存失效时间  
            require_once('index.shtml');  
        } else {  
            require_once('db.php');  
      
            $connect = Db::getInstance()->connect();  
            $sql = "SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5";  
            $result = mysql_query($sql, $connect);  
            $news = array();  
            while($row = mysql_fetch_array($result)) {  
                $news[] = $row;  
            }  
            //print_r($news);  
              
            ob_start(); //开启缓存区  
      
            //引入模板文件  
            require_once('templates/singwa.php'); //动态文件    singwa.php界面同样进过缓冲区  
            file_put_contents('index.shtml', ob_get_contents());  
            /*if(file_put_contents('index.shtml', ob_get_clean())) { 
                echo 'success'; 
            } else { 
                echo 'error'; 
            }*/  
        }  
          
    ?>  

singwa.php(使用bootstrap框架做界面)

    <!DOCTYPE html>  
    <html lang="en">  
    <head>  
        <meta charset="UTF-8">  
        <title>新闻中心</title>  
        <link rel="stylesheet" href="public/css/bootstrap.min.css" type="text/css">  
    </head>  
    <body>  
        <div class="container">  
            <h3>新闻列表</h3>  
            <ul class="list-group">  
                <?php foreach ($news as $key => $value) { ?>  
                <li class="list-group-item"><a href="#"><?php echo $value['title'];?></a></li>  
                <?php } ?>  
            </ul>  
        </div>  
    </body>  
    </html>  

 当我们第一次访问 index.php时,服务器将为我们生成一个静态文件index.shtml。

       出现 index.shtml文件:

index.shtml

    <!DOCTYPE html>  
    <html lang="en">  
    <head>  
        <meta charset="UTF-8">  
        <title>新闻中心</title>  
        <link rel="stylesheet" href="public/css/bootstrap.min.css" type="text/css">  
    </head>  
    <body>  
        <div class="container">  
            <h3>新闻列表</h3>  
            <ul class="list-group">  
                            <li class="list-group-item"><a href="#">今天有一条新闻7</a></li>  
                            <li class="list-group-item"><a href="#">今天有一条新闻6</a></li>  
                            <li class="list-group-item"><a href="#">今天有一条新闻5</a></li>  
                            <li class="list-group-item"><a href="#">今天有一条新闻4</a></li>  
                            <li class="list-group-item"><a href="#">今天有一条新闻3</a></li>  
                        </ul>  
        </div>  
    </body>  
    </html>  

 当我们不超过300秒,再次访问index.php时,服务器将访问静态文件index.shtml给我们访问。而当静态文件过期后,我们再次访问index.php,服务器将为我们更新index.shtml静态文件。

文件内容可以为:

require_once('db.php');  
  
$connect = Db::getInstance()->connect();  
$sql = "SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5";  
$result = mysql_query($sql, $connect);  
$news = array();  
while($row = mysql_fetch_array($result)) {  
    $news[] = $row;  
}  
//print_r($news);  
  
ob_start(); //开启缓存区  
  
//引入模板文件  
require_once('templates/singwa.php'); //动态文件    singwa.php界面同样进过缓冲区  
file_put_contents('index.shtml', ob_get_contents()); 

 

本文转载自:http://blog.csdn.net/qq_15096707/article/details/50809197

共有 人打赏支持
梦梦阁
粉丝 27
博文 300
码字总数 169681
作品 0
嘉定
高级程序员
私信 提问
小蚂蚁学习页面静态化(1)——静态化的原理

关于页面php文件执行阶段 语法分析——》编译——》运行 如何优化页面的响应时间 动态页面静态化 优化数据库 使用负载均衡 使用缓存 页面静态化能够解决的问题 1.减少服务器脚本的计算时间 ...

嗜学如命的小蚂蚁
2015/10/09
242
2
小蚂蚁学习页面静态化(2)——更新生成纯静态化页面的三种方式

更新生成纯静态化页面的三种方式:1.按照时间间隔更新。2.手动更新。3.定时更新(需要系统配合)。 1. 按照时间间隔更新。 当用户第一次访问这个页面的时候,程序自动判断,该静态文件是否存...

嗜学如命的小蚂蚁
2015/10/10
206
2
PHP页面纯静态化与伪静态化

在很多地方都看到有PHP整站静态化的东东,怪唬人的。。其实,你会静态化一个页面,那么别说整站了,想静态化多少都可以。所以关键是,首先要知道怎么静态化一个页面,了解静态化的原理是关键...

Corwien
2016/04/15
130
0
如何实现部分静态发布

目前我采用php + smarty来实现网站页面的静态化。 我的模版结构是有个base.html里面通过include分别加入了header、banner、footer等页面公共模块和详细页面的模块。 通过通用的页面的静态化方...

__FresHmaN
2013/10/13
187
2
php页面静态化

网站一直在加载,很慢,处理方式多种; 0.页面静态化; 1.优化数据库; 2.负载均衡; 3.使用缓存技术 关于页面静态化 使用函数如 fileputcontents($filename,$string); php的输出缓冲区 开启...

just_wkj
2016/01/02
114
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
4
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
4
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部