【学习:页面静态化、伪静态】

  • 1、原生页面静态化
    • 1.1 页面静态化基本知识
    • 1.2 ob缓冲介绍
    • 1.3 ob缓冲相关函数
    • 1.4 ob缓冲处理器
    • 1.5 ob多缓冲
    • 1.6 ob缓冲实现页面静态化
  • 2、伪静态

1、原生页面静态化

1.1 页面静态化基本知识

什么是页面静态化?

就是把网页做成 静态的网页(html网页)

首先了解下文件缓存页面静态化区别

文件缓存
【学习:页面静态化、伪静态】_第1张图片
页面静态化
【学习:页面静态化、伪静态】_第2张图片

为什么要使用页面静态化?

减轻数据库、服务器的压力,让用户的访问速度更快

哪些情况适合使用页面静态化?

频繁的读取数据的网站:新浪、知乎等内容展示类网站
读取的速度会提高

哪些情况不适合使用页面静态化?

数据会频繁变化的一些网站:股票、天气预报、会员数量等

如何实现页面静态化?

(1)ob缓冲
(2)file_put_contents()

1.2 ob缓冲介绍

ob缓冲: output buffering 输出缓冲,用来避免多个用户访问服务器时,一次性将数据输出,服务器压力比较大
【学习:页面静态化、伪静态】_第3张图片

开启ob缓冲

在php的配置文件中,找到 output_buffering 开启,重启服务器

1.3 ob缓冲相关函数

ob_start()                 开辟一块新的缓冲区域
ob_get_contents()   获取缓冲区域里面的内容
ob_get_length()        获取缓冲区域内容的长度
ob_flush()                 将缓冲区域的内容直接刷出\输出
ob_get_flush()          获得缓冲区域刷出的内容
ob_clean()                  清楚缓冲区
ob_get_clean()          清除缓冲区前获取缓冲区内容

1.4 ob缓冲处理器

当服务器向客户端回应、输出数据时(将缓冲区域的数据输出到客户端的时候),自动触发的一个函数,就称之为 缓冲处理器
通常会使用 ob_gzhandler 处理器对输出的内容进行压缩处理
使用方式

// 开启缓冲区,并压缩
ob_start('ob_gzhandler');

1.5 ob多缓冲

多次调用 ob_start(),每次调用 ob_start(),都会开启一个新的缓冲区,域,如果我们操作缓冲区域(例如:清空),操作的就是离 ob_start() 最近的那个区域

【学习:页面静态化、伪静态】_第4张图片

结果
这里写图片描述

1.6 ob缓冲实现页面静态化

// 1.开启缓冲区
ob_start();
// 2. 缓冲区内容
require 'info.php';
// 3. 读取缓冲区内容
$contents = ob_get_contents(); //不用加参数
// 4. 写入静态文件
$path = 'ob.html'; // 定义将要成为的静态页面文件
file_put_contents($path, $contents);
// 5. 原来要读的 info.php 文件静态化成为 ob.html

2、伪静态

伪静态: 顾名思义就是假的静态网站,也就是说动态网站为了方便被搜索引擎收录,利用服务器的rewirte实现的假静态的过程。

例如: www.odshen.com/blog/user/id/2/page/5... // 动态
伪静态就是 www.odshen.com/blog/user.html // 看似静态

封装的方法

 //根据url地址栏上面的信息,计算出、分析出MCA分别是什么
 public function initPathInfo()
 {
     # 主要获取url上面地址,然后进行处理
     if(isset($_SERVER['PATH_INFO'])){      
         $basic_path = $_SERVER['PATH_INFO'];    //  /admin/question/index/page/3.html
         //1. 将路径信息中后缀为.html的这个障眼法,去掉
         $path = strrchr($basic_path, '.');      //.html
         $path = str_replace($path, '', $basic_path); 
         $path = substr($path, 1);   //如果不写第三个参数就表示截取到末尾
         $arr = explode('/', $path);

         //统计数组的元素个数
         $length = count($arr);
         if($length==1){
             //只有模块,$_GET['m'],至于c、a会自动找配置文件
             $_GET['m'] = $arr[0];
         }elseif ($length==2){
             //确定模块、控制器,方法会找配置文件
             $_GET['m'] = $arr[0];
             $_GET['c'] = $arr[1];
         }elseif($length==3){
             $_GET['m'] = $arr[0];
             $_GET['c'] = $arr[1];
             $_GET['a'] = $arr[2];
         }else{
             //大于3个参数的时候:admin/question/index/page/3/id/15
             $_GET['m'] = $arr[0];
             $_GET['c'] = $arr[1];
             $_GET['a'] = $arr[2];
             //$_GET['page'] = 3;
             for($i=3;$i<$length;$i+=2){
                 $_GET[$arr[$i]] = $arr[$i+1];
             }
         }  
     }         
 }

补充:有入口文件可以隐藏(例如index.php)

你可能感兴趣的:(php)