• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP页面静态化——纯静态与伪静态用法详解

    本文实例讲述了PHP页面静态化——纯静态与伪静态用法。分享给大家供大家参考,具体如下:

    为什么要静态化页面?

           当用户访问一个不经常更新的Web页面,PHP接到指示对php脚本文件进行解析,从数据库查询到该页面所需要的数据,然后对页面模板进行渲染,最后将一个成品页面展示给用户。单次请求对于服务器来说非常简单,处理起来非常快,但是如果同时有成千上万各用户请求该页面呢?这无疑是对资源的一种浪费,这就是我们要做静态的目的。

           静态化分为纯静态与伪静态,纯静态又分为局部纯静态和全部纯静态。

    伪静态

           伪静态顾名思义,它并不是真的静态页面而是伪装的。例如一个以php作为后端语言的web站点,正常情况下他的url应当是类似于http://www.example.com/index.php,当我们做了伪静态处理后,当你访问同一个页面它展示的url可能就是http://www.example.com/index.html了。它的作用是路由简化,能够更好的被搜索引擎收录,当你不想让用户知道你的后端语言时也可以采用这种方法。这里设计到了路由与重定向知识,不做详解。

    纯静态

           一个页面通常由多个部分组成,例如一个博客,他可能由正文、分类、友情链接、栏目等部分组成。当有些部分更新频繁,而有些部分不常更新时就可以采用局部静态化。

           看了前面的内容这个就很容易理解了,当一个页面所有内容都不常更新即采用这种方式。

    静态化页面实现原理

            首先要说的是一个叫做缓冲器(buffer)的东西。举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘。对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上显示。
            这里我们就要对这个缓冲区做一下文章了,在php输出内容之前,我们取出缓冲区的内容(这里就是渲染好的模板内容了),然后将其写入一个静态文件中并设置过期时间,当下次用户访问该页面的时候,如果该静态文件存在并且在有效期内,我们就直接将该静态文件展示给用户看,否则重写静态文件。

    代码实现

    数据库连接,用到了单例模式。

    Database.php

    ?php
    class Database {
      //用于保存实例化对象
      private static $instance;
      //用于保存数据库句柄
      private $db = null;
    
      //禁止直接实例化,负责数据库连接,将数据库连接句柄保存至私有变量$db
      private function __construct($options) {
        $this->db = mysqli_connect($options['db_host'], $options['db_user'], $options['db_password'], $options['db_database']);
      }
    
      //负责实例化数据库类,返回实例化后的对象
      public static function getInstance($options) {
        if (!(self::$instance instanceof self)) {
          self::$instance = new self($options);
        }
        return self::$instance;
      }
    
      //获取数据库连接句柄
      public function db() {
        return $this->db;
      }
    
      //禁止克隆
      private function __clone() {
        // TODO: Implement __clone() method.
      }
    
      //禁止重构
      private function __wakeup() {
        // TODO: Implement __wakeup() method.
      }
    }
    
    

    用于静态化页面

    Cache.php

    ?php
    class Cache {
      public function index($options) {
        //判断文件是否存在,判断是否过期
        if (is_file('shtml/index.shtml')  (time() - filemtime('shtml/index.shtml')  300)) {
          require_once ('index.shtml');
        }else {
          require_once ('Database.php');
          $con = Database::getInstance($options)->db();
          $sql = "SELECT * FROM pro_test";
          $exe_res = mysqli_query($con, $sql);
          $res = mysqli_fetch_all($exe_res);
          try{
            if (!$res) {
              throw new Exception("no result");
            }
          }catch (Exception $e) {
            echo 'Message: ' .$e->getMessage();
          }
          //开启缓存区,这后面的内容都会进缓存区
          ob_start();
          //引入模板文件(模板会渲染数据)
          require_once ('templates/index.php');
          //取出缓存区内容(在这里是渲染后的模板),将其保存(默认会覆盖原来的)为index.shtml(static html)
          file_put_contents('shtml/index.shtml', ob_get_contents());
        }
      }
    }
    //数据库配置信息
    $options = [
      'db_host' => 'mysql',
      'db_user' => 'root',
      'db_password' => 'localhost',
      'db_database' => 'pro_shop',
    ];
    $obj = new Cache();
    $obj->index($options);
    
    

    template/index.php

    !DOCTYPE>
    html>
    head>
      meta charset="UTF-8">
      title>首页/title>
    /head>
    body>
    ?php foreach ($res as $item) {?>
    div>姓名:?php echo $item[1]?>/div>
    div>密码:?php echo $item[2]?>/div>
    ?php }?>
    /body>
    /html>
    
    

    浏览器访问 localhost/Cache.php

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • ThinkPHP 3.2.3实现页面静态化功能的方法详解
    • PHP实现HTML页面静态化的方法
    • 使用ob系列函数实现PHP网站页面静态化
    • PHP实现页面静态化深入讲解
    上一篇:PHP预定义接口——Iterator用法示例
    下一篇:实例化php类时传参的方法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP页面静态化——纯静态与伪静态用法详解 PHP,页面,静态,化,纯,与,