PHP页⾯静态化——纯静态与伪静态⽤法详解⽬录为什么要静态化页⾯?伪静态纯静态静态化页⾯实现原理代码实现本⽂实例讲述了PHP页⾯静态化——纯静态与伪静态⽤法。
分享给⼤家供⼤家参考,具体如下:为什么要静态化页⾯?当⽤户访问⼀个不经常更新的Web页⾯,PHP接到指⽰对php脚本⽂件进⾏解析,从数据库查询到该页⾯所需要的数据,然后对页⾯模板进⾏渲染,最后将⼀个成品页⾯展⽰给⽤户。
单次请求对于服务器来说⾮常简单,处理起来⾮常快,但是如果同时有成千上万各⽤户请求该页⾯呢?这⽆疑是对资源的⼀种浪费,这就是我们要做静态的⽬的。
静态化分为纯静态与伪静态,纯静态⼜分为局部纯静态和全部纯静态。
伪静态纯静态局部纯静态⼀个页⾯通常由多个部分组成,例如⼀个博客,他可能由正⽂、分类、友情链接、栏⽬等部分组成。
当有些部分更新频繁,⽽有些部分不常更新时就可以采⽤局部静态化。
全部纯静态看了前⾯的内容这个就很容易理解了,当⼀个页⾯所有内容都不常更新即采⽤这种⽅式。
静态化页⾯实现原理⾸先要说的是⼀个叫做缓冲器(buffer)的东西。
举个简单的例⼦说明他的作⽤:我们在编辑⼀篇⽂档时,在我们没有保存之前,系统是不会向磁盘写⼊的,⽽是写到buffer中,当buffer写满或者执⾏了保存操作,才会将数据写⼊磁盘。
对于PHP来说,每⼀次像 echo 这样的输出操作,同样是先写⼊到了 php buffer ⾥,在脚本执⾏完毕或者执⾏了强制输出缓存操作,数据才会在浏览器上显⽰。
这⾥我们就要对这个缓冲区做⼀下⽂章了,在php输出内容之前,我们取出缓冲区的内容(这⾥就是渲染好的模板内容了),然后将其写⼊⼀个静态⽂件中并设置过期时间,当下次⽤户访问该页⾯的时候,如果该静态⽂件存在并且在有效期内,我们就直接将该静态⽂件展⽰给⽤户看,否则重写静态⽂件。
代码实现数据库连接,⽤到了单例模式。
Database.php<?phpclass Database {//⽤于保存实例化对象private static $instance;//⽤于保存数据库句柄private $db = null;//禁⽌直接实例化,负责数据库连接,将数据库连接句柄保存⾄私有变量$dbprivate 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<?phpclass 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程序设计有所帮助。