百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP页面静态化之纯静态与伪静态用途详解
分享文章到:

PHP页面静态化之纯静态与伪静态用途详解

发布时间:09/01 来源:未知 浏览: 关键词:

伪静态

伪静态望文生义,它并不是真的静态页面而是假装的。例如一个以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) {?>
<p>姓名:<?php echo $item[1]?></p>
<p>密码:<?php echo $item[2]?></p>
<?php }?>
</body>
</html>

阅读器拜访 localhost/Cache.php

以上就是PHP页面静态化之纯静态与伪静态用途详解的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板