• 四,真静态技术实现页面静态化


     真静态技术就是在添加新闻时候产生一个html静态文件,等再次修改新闻时候,再重新产生html静态文件,这样保证html静态文件和数据表内容完全一致。

    实例如下:

    (1)操作数据库代码页:ConnDB.class.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 58
     * Date: 2016/8/5
     * Time: 8:57
     */
    class ConnDB{
        private static $host = '127.0.0.1';
        private static $username = 'root';
        private static $password = '7758521Lhy';
        private static $db = 'test';
        private $conn = null;
    
        public function __construct(){
            $this->conn = new MySQLi(self::$host,self::$username,self::$password,self::$db);
            if(!$this->conn){
                echo '数据库连接错误:'.$this->conn->connect_error;
                exit();
            }
            $this->conn->query("set names utf-8");
        }
    
        public function execute_dql($sql){
            $rs = $this->conn->query($sql) or die('查询出错!'.$this->conn->error);
            $rsList = array();
            if($rs){
                while($row = $rs->fetch_assoc()){
                    $rsList[] = $row;
                }
            }
            $rs->free();
            return $rsList;
        }
    
        public function execute_dml($sql){
            $rs = $this->conn->query($sql);
            if(!$rs){
                $flag = 0;
            }else if($this->conn->affected_rows){
                $flag = 1;
            }else{
                $flag = 2;
            }
            return $flag;
        }
    
        public function getInsertId(){
            return $this->conn->insert_id;
        }
    
        public function clossDB(){
            if($this->conn){
                $this->conn->close();
            }
        }
    }
    

    (2)产生文件名字代码页getHtmlName.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 58
     * Date: 2016/8/9
     * Time: 21:29
     */
    
    function getHtmlName($id){
        return "news_id".$id.".html";
    }

    (3)显示新闻列表页面news_list.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 58
     * Date: 2016/8/5
     * Time: 15:31
     */
    header("Content-Type:text/html;charset=utf-8");
    require_once "getHtmlName.php";
    require_once "ConnDB.class.php";
    $conn = new ConnDB();
    $sql = "select * from news";
    $rs = $conn->execute_dql($sql);
    $conn->clossDB();
    echo "
    <a href='add_news.php'>发布文章</a>
    <table border='1'>
        <tr><th>id</th><th>标题</th><th>详细内容</th><th>修改</th></tr>";
    
    foreach($rs as $row){
        $url = getHtmlName($row['id']);
        echo "<tr><td>{$row['id']}</td><td>{$row['title']}</td><td><a href= {$url}>详细内容</a></td><td><a href= update_news.php?id={$row['id']}>修改</a></td></tr>";
    }
    echo "
    </table>
    ";
    

    (4)添加新闻的页面 add_news.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 58
     * Date: 2016/8/5
     * Time: 15:34
     */
    ?>
    <center>发布新闻</center>
    <form method="post" action="newsAction.php">
    <table>
        <tr><th>新闻标题:</th><td><input type="text" name="title"></td></tr>
        <tr><th>新闻内容:</th><td><input type="text" name="content"></td></tr>
        <tr><td colspan="2" align="center"><input type="submit" value="发布"></td></tr>
    </table>
        <input type="hidden" name="opt" value="add">
    </form>
    

     (5)修改新闻的代码页 update_news.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 58
     * Date: 2016/8/9
     * Time: 21:48
     */
    require_once "ConnDB.class.php";
    
    $id = $_GET['id'];
    $conn = new ConnDB();
    $rs = $conn->execute_dql("select * from news where id = {$id}");
    $conn->clossDB();
    if($rs && $row = $rs[0]){
    ?>
    <form action="newsAction.php" method="post">
        <input type="hidden" name="id" value="<?=$row['id']?>">
        <input type="hidden" name="opt" value="up">
    标题:<input type="text" name="title" value="<?=$row['title']?>"><br/>
    内容:<input type="text" name="content" value="<?=$row['content']?>"><br/>
        <input type="submit" value="修改" />
    </form>
    <?php } ?>
    

     (6)处理添加或修改函数代码页:newsAction.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 58
     * Date: 2016/8/5
     * Time: 15:37
     */
    require_once "ConnDB.class.php";
    require_once "getHtmlName.php";
    $conn = new ConnDB();
    $opt = $_POST['opt'];
    $title = $_POST['title'];
    $content = $_POST['content'];
    if($opt == 'add'){
        $sql = "insert into news(title,content) VALUES ('{$title}','{$content}')";
        $rs = $conn->execute_dml($sql);
        $id = $conn->getInsertId();
    }else if($opt == 'up'){
        $id = $_POST['id'];
        $sql = "update news set title='{$title}',content='{$content}' where id = '{$id}'";
        $rs = $conn->execute_dml($sql);
    }
    $conn->clossDB();
    if(!$id){
        exit();
    }
    $file_name  = getHtmlName($id);
    
    
    if(!$rs){
        echo '执行失败!';
        exit();
    }else if($rs == 1){
        echo '执行成功!';
    }else{
        echo '执行成功,但是没有行改变!';
    }
    $fp_tmp = fopen("template.tpl","r");
    $fp_html_file = fopen($file_name,"w");
    while(!feof($fp_tmp)){
        $row = fgets($fp_tmp);
        $row = str_replace("%title%",$title,$row);
        $row = str_replace("%content%",$content,$row);
        fwrite($fp_html_file,$row);
    }
    fclose($fp_tmp);
    fclose($fp_html_file);
    

    (7)生成静态文件的模板template.tpl

    <html>
    <head>
        <meta http-equiv="content-type=text/html;charset=utf-8"/>
        <title>%title%</title>
    </head>
    <body>
    <h1>%title%</h1>
    <hr/>
    <pre>%content%</pre>
    </body>
    </html>

    真静态技术解决了php缓存机制的缺陷,它的优点有三个:

    (1)减少服务器对数响应的负荷;

    (2)加载不用调动数据库,响应速度快;

    (3)便于优化引擎。

    但是真静态技术也存在一定缺陷。比如:

    (1)空间占用比较大;

    (2)生成的文件多了,服务器对html文件的响应负担也比较重。

    一个系统使用真静态进行页面静态化,需要生成海量页面静态文件,可以考虑使用伪静态来处理。可以继续优化:

  • 相关阅读:
    Synchronized和Lock的实现原理和锁升级
    如何禁止CPU指令重排
    MESI缓存一致性
    归并排序
    强软弱虚四种引用和ThreadLocal内存泄露
    VINS-Mono代码分析与总结(完整版)
    IMU误差模型与校准
    小感
    K8S conul部署
    Centos Consul集群及Acl配置
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/5742085.html
Copyright © 2020-2023  润新知