Home  >  Article  >  Backend Development  >  Detailed explanation of pure static and pseudo-static usage of PHP page staticization

Detailed explanation of pure static and pseudo-static usage of PHP page staticization

coldplay.xixi
coldplay.xixiforward
2020-07-14 17:16:273439browse

Detailed explanation of pure static and pseudo-static usage of PHP page staticization

The examples in this article describe the pure static and pseudo-static usage of PHP page staticization. Share it with everyone for your reference, the details are as follows:

Why do we need to make the page static?

When a user accesses a not frequently updated Web page, PHP is instructed to parse the php script file and query the data required for the page from the database , then render the page template, and finally display a finished page to the user. A single request is very simple and fast for the server to handle, but what if thousands of different users request the page at the same time? This is undoubtedly a waste of resources, and this is the purpose of doing static.

Staticization is divided into pure static and pseudo-static, and pure static is divided into partial pure static and total pure static.

Related learning recommendations: PHP programming from entry to proficiency

pseudo-static

Pseudo-static, as the name suggests, is not true The static page is disguised. For example, for a web site with PHP as the back-end language, under normal circumstances its URL should be similar to http://www.example.com/index.php. When we do pseudo-static processing , when you visit the same page, the URL displayed may be http://www.example.com/index.html. Its function is to simplify routing and be better indexed by search engines. This method can also be used when you don’t want users to know your back-end language. The routing and redirection knowledge is designed here and will not be explained in detail.

Pure static

  • Partial pure static

A page usually consists of multiple parts, such as a blog, which may consist of text, categories, friendship It is composed of links, columns and other parts. Partial staticization can be used when some parts are updated frequently and some parts are updated infrequently.

  • All purely static

It is easy to understand after reading the previous content. This method is used when all the content of a page is not updated frequently.

Static page implementation principle

The first thing I want to talk about is a thing called a buffer. Let's give a simple example to illustrate its role: when we edit a document, the system will not write to the disk before we save it, but will write it to the buffer. When the buffer is full or a save operation is performed, , the data will be written to the disk. For PHP, every output operation like echo is also written to the php buffer first. The data will not be displayed on the browser until the script is executed or a forced output caching operation is performed.
       Here we are going to do something about this buffer. Before php outputs the content, we take out the content of the buffer (here is the rendered template content), and then write it into a static file and set it Expiration time, when the user visits the page next time, if the static file exists and is within the validity period, we will directly display the static file to the user, otherwise we will rewrite the static file.

The code implements

database connection, using the singleton mode.

Database.php

<?php
class Database {
  //用于保存实例化对象
  private static $instance;
  //用于保存数据库句柄
  private $db = null;

  //禁止直接实例化,负责数据库连接,将数据库连接句柄保存至私有变量$db
  private function __construct($options) {
    $this->db = mysqli_connect($options[&#39;db_host&#39;], $options[&#39;db_user&#39;], $options[&#39;db_password&#39;], $options[&#39;db_database&#39;]);
  }

  //负责实例化数据库类,返回实例化后的对象
  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.
  }
}

Used for static pages

Cache.php

<?php
class Cache {
  public function index($options) {
    //判断文件是否存在,判断是否过期
    if (is_file(&#39;shtml/index.shtml&#39;) && (time() - filemtime(&#39;shtml/index.shtml&#39;) < 300)) {
      require_once (&#39;index.shtml&#39;);
    }else {
      require_once (&#39;Database.php&#39;);
      $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 &#39;Message: &#39; .$e->getMessage();
      }
      //开启缓存区,这后面的内容都会进缓存区
      ob_start();
      //引入模板文件(模板会渲染数据)
      require_once (&#39;templates/index.php&#39;);
      //取出缓存区内容(在这里是渲染后的模板),将其保存(默认会覆盖原来的)为index.shtml(static html)
      file_put_contents(&#39;shtml/index.shtml&#39;, ob_get_contents());
    }
  }
}
//数据库配置信息
$options = [
  &#39;db_host&#39; => &#39;mysql&#39;,
  &#39;db_user&#39; => &#39;root&#39;,
  &#39;db_password&#39; => &#39;localhost&#39;,
  &#39;db_database&#39; => &#39;pro_shop&#39;,
];
$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>

Browser accesslocalhost/Cache.php

The above is the detailed content of Detailed explanation of pure static and pseudo-static usage of PHP page staticization. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete