• PHP实现页面静态化


    我们先来创建一个 mooc_cms 数据库,创建表 news,如下:

       并且插入多条数据,如下:

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

    [php] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <?php   
    2.     /** 
    3.      * 数据库连接封装 
    4.      */  
    5.     class Db {  
    6.         //存储类的实例的静态成员变量  
    7.         private static $_instance;  
    8.         //数据库链接静态变量  
    9.         private static $_connectSource;  
    10.         //连接数据库配置  
    11.         private $_dbConfig = array(  
    12.                 'host' => '127.0.0.1',  
    13.                 'user' => 'root',  
    14.                 'password' => '',  
    15.                 'database' => 'mooc_cms'  
    16.             );  
    17.   
    18.         private function __construct() {  
    19.   
    20.         }  
    21.   
    22.         /** 
    23.          * 实例化 
    24.          */  
    25.         public static function getInstance() {  
    26.             //判断是否被实例化  
    27.             if(!(self::$_instance instanceof self)) {  
    28.                 self::$_instance = new self();  
    29.             }  
    30.             return self::$_instance;  
    31.         }  
    32.   
    33.         /** 
    34.          * 数据库连接 
    35.          */  
    36.         public function connect() {  
    37.             if(!self::$_connectSource) {  
    38.                 //数据库连接  
    39.                 // @ 符号可以取消警告提示  
    40.                 self::$_connectSource = @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);  
    41.   
    42.                 if(!self::$_connectSource) {  
    43.                     //抛出异常处理  
    44.                     throw new Exception('mysql connect error ');  
    45.                 }  
    46.                 //选择一款数据库  
    47.                 mysql_select_db($this->_dbConfig['database'], self::$_connectSource);  
    48.                 //设置字符编码  
    49.                 mysql_query("set names UTF8", self::$_connectSource);  
    50.             }  
    51.   
    52.             //返回资源链接  
    53.             return self::$_connectSource;  
    54.         }  
    55.     }  
    56. ?>  


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

    [php] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <?php   
    2.     //1、连接数据库,然后从数据库里面获取数据  
    3.     //2、把获取到的数据填充到模板文件里面  
    4.     //3、需要把动态的页面转化为静态页面,生成纯静态化文件  
    5.     if(is_file('index.shtml') && (time() - filemtime('index.shtml')) < 300) { //设置缓存失效时间  
    6.         require_once('index.shtml');  
    7.     } else {  
    8.         require_once('db.php');  
    9.   
    10.         $connect = Db::getInstance()->connect();  
    11.         $sql = "SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5";  
    12.         $result = mysql_query($sql, $connect);  
    13.         $news = array();  
    14.         while($row = mysql_fetch_array($result)) {  
    15.             $news[] = $row;  
    16.         }  
    17.         //print_r($news);  
    18.           
    19.         ob_start(); //开启缓存区  
    20.   
    21.         //引入模板文件  
    22.         require_once('templates/singwa.php'); //动态文件    singwa.php界面同样进过缓冲区  
    23.         file_put_contents('index.shtml', ob_get_contents());  
    24.         /*if(file_put_contents('index.shtml', ob_get_clean())) { 
    25.             echo 'success'; 
    26.         } else { 
    27.             echo 'error'; 
    28.         }*/  
    29.     }  
    30.       
    31. ?>  

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

    [php] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <!DOCTYPE html>  
    2. <html lang="en">  
    3. <head>  
    4.     <meta charset="UTF-8">  
    5.     <title>新闻中心</title>  
    6.     <link rel="stylesheet" href="public/css/bootstrap.min.css" type="text/css">  
    7. </head>  
    8. <body>  
    9.     <div class="container">  
    10.         <h3>新闻列表</h3>  
    11.         <ul class="list-group">  
    12.             <?php foreach ($news as $key => $value) { ?>  
    13.             <li class="list-group-item"><a href="#"><?php echo $value['title'];?></a></li>  
    14.             <?php } ?>  
    15.         </ul>  
    16.     </div>  
    17. </body>  
    18. </html>  

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

           出现 index.shtml文件:

           index.shtml

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <!DOCTYPE html>  
    2. <html lang="en">  
    3. <head>  
    4.     <meta charset="UTF-8">  
    5.     <title>新闻中心</title>  
    6.     <link rel="stylesheet" href="public/css/bootstrap.min.css" type="text/css">  
    7. </head>  
    8. <body>  
    9.     <div class="container">  
    10.         <h3>新闻列表</h3>  
    11.         <ul class="list-group">  
    12.                         <li class="list-group-item"><href="#">今天有一条新闻7</a></li>  
    13.                         <li class="list-group-item"><href="#">今天有一条新闻6</a></li>  
    14.                         <li class="list-group-item"><href="#">今天有一条新闻5</a></li>  
    15.                         <li class="list-group-item"><href="#">今天有一条新闻4</a></li>  
    16.                         <li class="list-group-item"><href="#">今天有一条新闻3</a></li>  
    17.                     </ul>  
    18.     </div>  
    19. </body>  
    20. </html>  

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

           这里讲到的只是一种触发静态文件更新的方法,当然还有:手动触发更新(设置后台管理,管理员想立即更新静态文件,就点击运行生成静态文件即可)、Linux服务器下的crontab定时扫描程序(在Linux服务器下,设置命令:

    * /1 * * * * php 路径+文件名    ==>  代表 每一分钟系统将执行一次指定文件

    文件内容可以为:

    [php] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      1. require_once('db.php');  
      2.   
      3. $connect = Db::getInstance()->connect();  
      4. $sql = "SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5";  
      5. $result = mysql_query($sql, $connect);  
      6. $news = array();  
      7. while($row = mysql_fetch_array($result)) {  
      8.     $news[] = $row;  
      9. }  
      10. //print_r($news);  
      11.   
      12. ob_start(); //开启缓存区  
      13.   
      14. //引入模板文件  
      15. require_once('templates/singwa.php'); //动态文件    singwa.php界面同样进过缓冲区  
      16. file_put_contents('index.shtml', ob_get_contents());  
  • 相关阅读:
    JAVA课程设计
    201521123085 《Java程序设计》第14周学习总结
    201521123065《java程序设计》第13周学习总结
    软工结对编程
    软工个人作业2
    软工网络16个人作业1
    201621123008 《Java程序设计》第14周学习总结
    201621123008 《Java程序设计》第13周学习总结
    201621123008 《Java程序设计》第12周学习总结
    201621123008 《Java程序设计》 第11周学习总结
  • 原文地址:https://www.cnblogs.com/bush/p/6677890.html
Copyright © 2020-2023  润新知