PHP之页面静态化技术深入浅出

本文深入探讨了PHP页面静态化技术,包括静态化概念、优化页面响应时间和动态URL的静态形式。详细介绍了纯静态化和局部动态化的实现,如使用buffer、ob_get_contents()和file_put_contents()函数生成静态HTML,以及通过AJAX实现局部动态加载。同时讲解了PHP处理伪静态的方法,如Apache和Nginx服务器下的rewrite配置。

【推荐阅读】微服务还能火多久?>>> hot3.png

  • 目录
  • 1. 前言
  • 1.1静态化概念
  • 1.2如何优化页面响应时间
  • 1.3动态URL地址设置成静态形式
  • 1.4静态化详细介绍
  • 2.纯静态化案例实现
  • 2.1 buffer认知
  • 2.2存储流程
  • 2.3 ob_get_contents()函数
  • 2.4 file_put_contents()函数
  • 2.5纯静态化案例之步骤解析
  • 2.6纯静态化案例实现
  • 2.7触发系统生成纯静态化页面的三种方式
  • 3.局部动态化案例
  • 3.1AJAX技术加载动态概念
  • 3.2案例:实现”排行榜局部动态化”
  • 3.3 PHP处理伪静态
  • 3.4 WEB服务器rewrite配置
  • 3.4.1 Apache下rewrite配置
  • 3.4.2 Nginx下rewrite配置

1.前言

之前写了篇关于页面静态化之ob函数初试,接下来我们真正走入各种静态化技术的实现。

1.1静态化概念

动态页面需要解析,而静态页面就是纯html文件,本篇文章实战代码分享:https://github.com/mtdgclub/obCache

1.2如何优化页面响应时间

优化方向:

  • 动态页面静态化
  • 优化数据库
  • 使用负载均衡
  • 使用缓存

总结:如果页面中一些内容不经常变动,动态页面静态化是非常有效的加速手段.

实质:生成静态的HTML文件

作用:减少服务器脚本的计算时间、降低服务器的响应时间

动态程序执行流程:

  • 连接数据库服务器或者缓存服务器
  • 获取数据
  • 填充到模板
  • 呈现到前端

1.3动态URL地址设置成静态形式

什么是伪静态?

原URL:http://域名/index.php?c=play&a=index&id=xxxx

伪静态URL:http://域名/index.php/play/xxxx.shtml

伪静态目的:为了美观、方便搜索引擎收录

1.4静态化详细介绍

PHP静态化分为纯静态化和伪静态化,而纯静态化又分为局部静态化和全部静态化

up-2138dfb4eefb093903cf33b375f4f64f075.png

2.纯静态化案例实现

2.1 buffer认知

buffer其实是缓冲区,一个内存地址空间,主要用于存储数据区域

2.2存储流程

数据存储不是直接存储到磁盘,而是先存储到Buffer缓冲区,然后等缓冲区块满了再存储到磁盘,内容输出亦是如此,输出流程:内容->php buffer->tcp->终端

去到php.ini文件查找该段,php默认开启

up-a285574fbcb453d4d731527055c2c54aa9e.png

2.3 ob_get_contents()函数

ob_get_contents()函数能够帮助我们获取PHP缓存区的数据

注意:如果缓存区没有被开启,是不能获取到缓存区内容,所以务必开启

up-ec8e40ae761cfa15a41a2771b4e8822d220.png

如果想开启缓存区,除了在php.ini中设置,还能通过ob_start()函数开启

up-fbe216a108a7cce3f24eed0f7b81968ac7d.png

2.4 file_put_contents()函数

file_put_contents()函数使用PHP内置缓存机制实现页面静态化(output_buffering),当然除了file_put_contents()还有fwrite()函数,用于写入文件(可安全用于二进制文件)。

强调:纯静态化的目地是生纯静态的HTML文件

几个核心的ob函数

函数

备注

ob_start

打开输出控制缓冲

ob_get_contents

返回输出缓冲区内容

ob_clean

清空(擦掉)输出缓冲区

ob_get_clean

得到当前缓冲区的内容并删除当前输出缓冲区

示例:

up-99160fdca03bab07ada599fbaee879ca980.png

2.5纯静态化案例之步骤解析

  • 连接数据库,然后从数据库里面获取数据
  • 把获取到的数据填充到模板文件里面
  • 把动态页面转换为静态页面,生成纯静态文件

2.6纯静态化案例实现

详见init.php文件

<?php
/**
 * 纯静态化案例
 */
//连接数据库
require_once('./db.php');
$connect=Db::getInstance()->connect();
$sql="select * from demo";
$result=mysqli_query($sql,$connect);
$news=array();
while($row=mysqli_fetch_array($result)){
    $news[]=$row;
}

ob_start();
//第二步:引入模板文件
require_once('./demo2.php');
if(file_put_contents('idnex.html',ob_get_clean())){
    echo'succcess';
}else{
    echo'error';
}

2.7触发系统生成纯静态化页面的三种方式

  • 页面添加缓存时间
  • 手动触发方式
  • crontab定时扫描程序

方式一:页面添加缓存时间

up-0833af7d0b578d14f6f780be2b194764bf0.png

代码案例如下,详见:

<?php
/**
 * 方式一:页面添加缓存时间
 */
//改动1:文件最后修改时间,超时5分钟
if(is_file('./index.html') && (time()-filemtime('./idnex.html'))<300){
    require_once('./index.html');
}else{
    require_once('./db.php');
    $connect=Db::getInstance()->connect();
    $sql="select * from demo";
    $result=mysqli_query($sql,$connect);
    $news=array();
    while($row=mysqli_fetch_array($result)){
        $news[]=$row;
    }

    ob_start();
    //第二步:引入模板文件
    require_once('./index.php');
    //改动2:把信息呈现给终端
    file_put_contents('index.html',ob_get_contents());
}

方式二:手动触发方式

一般在后台手动触发,比如:

up-886c8420a285604a3c0e450a23f53a1af85.png

方式三:crontab定时扫描程序

crontab是linux的工具,主要作用是为了设置定时触发的内容

linux设定定时任务命令含义理解:

前五个星号,分别代表分、时、日、月、周

up-167939581a99f247b9408130b13fd6ddbac.png

比如:前面*/5,代表每五分钟执行一次;后面是告诉linux服务器去执行这段程序的地址

具体操作:

  • 进入linux服务器,一般使用Xshell软件连接
  • 输入帐号密码,必须保证你的账户有设定定时任务权限,最好是root权限
  • 输入 crontab -e ,该命令表示编辑crontab

up-2ed8d92232f654c4c4b3a72555942436e8b.png

  • 然后在编辑区写入要执行的定时任务命令,输入wq保存

up-544a51ff357e0e92ff1542cc3b3aa2028e6.png

查看设置的定时任务执行日志,命令如下:

up-98813ced2e93c096cb5214daceee25eae4c.png

3.局部动态化案例

3.1AJAX技术加载动态概念

如何在静态化页面中加载动态内容?比如我们日常看到的下拉刷新等,其实这里面就用到的了AJAX技术,比如jquery的ajax请求格式如下:

$.ajax({
    url:'请求接口地址',
    type:'get',
    dataType:'json',
    error:function(){
    },
    success:function(){
    },
});

实际开发步骤:

  • 编写接口并按条件返回数据
  • AJAX请求接口操作并处理数据

3.2案例:实现”排行榜局部动态化”

up-2c7d085a395b5e382f5bd3b0e5a1ac09b99.png

编写接口如下,详见obAjax.php文件:

<?php
/**
 * 排行榜接口数据
 * 1.获取数据
 * 2.封装数据返回
 */
require_once('./db.php');
$connect = Db::getInstance()->connect();
$sql = ".....";
$result = mysqli_query($sql,$connect);
$res = [];
while($row = mysqli_fetch_assoc($result)){
    $res[]=$row;
}
$data = ['code'=>1,'message'=>'sucess','data'=>$res];
return json_encode($data);

AJAX请求接口操作

<script src="jquery.min.js"></script>
<script>
    $.ajax({
        url:'obAjax.php',
        type:'get',
        dataType:'json',
        error:function(){
        },
        success:function(data){
            if(data.code==1){
                //todo
            }else{
                //todo
            }
        },
    });
</script>

这样我们就能实现静态化页面的局部动态内容获取啦~

3.3 PHP处理伪静态

伪静态就是把动态的URL地址伪装成静态的URL地址

第一种方法:通过path_info模式设置

注意:nginx服务器默认情况下不支持path_info模式,需要配置

设置伪静态后通过正则表达式去分析伪静态URL地址,我们可以通过print_r($_SERVER);查看到域名后面的URL信息

up-6969bb83158f38f3c19c6747b25f6bed42d.png

通过这段信息,我们使用正则表达式处理,提取数据

up-5ee07651077c77b1460dac0bd8d092a1772.png

up-ca8a637d16bbb7ee5eeee43199d06ec7b03.png

提取到信息后就根据得到的数据到数据库获取到相应内容

up-01b0120906e3feeff3c73dfa3bd22b0240c.png

3.4 WEB服务器rewrite配置 

rewrite在apache和nginx两个服务器下配置是不同的

3.4.1 Apache下rewrite配置

配置虚拟域名配置步骤:

1)在http.conf文件中开启相关模式

LoadModule rewrite_module modules/mod_rewrite.so
Include conf/extra/httpd-vhosts.conf

2)在httpd_vhosts.conf配置文件配置相关信息

up-9885a0ce8fd1d087a05c3f02b8b572f4461.png

3)配置host文件,让虚拟域名能够访问

up-f02f0adfe05d14cf63c238f1ab477de1cea.png

最后重启apache服务器

4)案例配置规则

RewriteEngine on
RewriteRule ^/detail/([0-9]*).html$/detail.php?id=$1

up-b7b3b8195f3ee196899987a8cb6e115c24e.png

去掉#开启,重启apache服务器

当我们请求时候,默认优先访问伪静态文件;那么如何配置,能够使得如果服务器存在该文件或目录优先执行这个文件或目录,只有在不存在的时候才执行伪静态规则,那就是开启下面这两行规则:

up-c249a2698ce05f404596aa69f4ad6a5d916.png

去掉#开启,重启apache服务器

3.4.2 Nginx下rewrite配置 

rewrite ^/detail/(\d+)\.html$/detail.php?od=$1 last;
标识    区配的URL        变成的URL

实操:

首先通过命令,找到该文件,并编辑它

文件目录

up-6e76ea261258a02890f44e4fc7d6381cca4.png

文件名称

up-093e46c4c9d21a8356c06b3d0b79e7305cb.png

编辑文件

up-290fa2e7711fc719c574b8975b8b27950fe.png

添加匹配规则

up-188e68ed2b755231a775bf210974b663ff0.png

保存,然后找到项目目录,建立对应项目文件,最后记得重启niginx服务,命令如下:

up-07644fad0464949ce5018b34a1c27303e4f.png

注意:

  • 如果规则不匹配,服务器会返回404
  • 伪静态配置能够方便搜索引擎收录,但是不是配置越多越好,配置越多,消耗资源越多,所以要根据具体业务而配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值