首页后端开发PHPPHP页面静态化有何作用,原理及实现怎样理解

PHP页面静态化有何作用,原理及实现怎样理解

时间2024-03-22 20:52:03发布访客分类PHP浏览1425
导读:关于“PHP页面静态化有何作用,原理及实现怎样理解”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“PHP页面静态化有...
关于“PHP页面静态化有何作用,原理及实现怎样理解”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“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页面静态化有何作用,原理及实现怎样理解的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP页面静态化有何作用,原理及实现怎样理解
本文地址: https://pptw.com/jishu/650871.html
MySQL数据库中查看表注释的方法有哪些 异步请求PHP服务器为什么不返回数据?

游客 回复需填写必要信息