- 目录
- 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静态化分为纯静态化和伪静态化,而纯静态化又分为局部静态化和全部静态化

2.纯静态化案例实现
2.1 buffer认知
buffer其实是缓冲区,一个内存地址空间,主要用于存储数据区域
2.2存储流程
数据存储不是直接存储到磁盘,而是先存储到Buffer缓冲区,然后等缓冲区块满了再存储到磁盘,内容输出亦是如此,输出流程:内容->php buffer->tcp->终端
去到php.ini文件查找该段,php默认开启

2.3 ob_get_contents()函数
ob_get_contents()函数能够帮助我们获取PHP缓存区的数据
注意:如果缓存区没有被开启,是不能获取到缓存区内容,所以务必开启
![]()
如果想开启缓存区,除了在php.ini中设置,还能通过ob_start()函数开启

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 | 得到当前缓冲区的内容并删除当前输出缓冲区 |
示例:

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定时扫描程序
方式一:页面添加缓存时间

代码案例如下,详见:
<?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());
}
方式二:手动触发方式
一般在后台手动触发,比如:

方式三:crontab定时扫描程序
crontab是linux的工具,主要作用是为了设置定时触发的内容
linux设定定时任务命令含义理解:
前五个星号,分别代表分、时、日、月、周

比如:前面*/5,代表每五分钟执行一次;后面是告诉linux服务器去执行这段程序的地址
具体操作:
- 进入linux服务器,一般使用Xshell软件连接
- 输入帐号密码,必须保证你的账户有设定定时任务权限,最好是root权限
- 输入 crontab -e ,该命令表示编辑crontab
![]()
- 然后在编辑区写入要执行的定时任务命令,输入wq保存
![]()
查看设置的定时任务执行日志,命令如下:
![]()
3.局部动态化案例
3.1AJAX技术加载动态概念
如何在静态化页面中加载动态内容?比如我们日常看到的下拉刷新等,其实这里面就用到的了AJAX技术,比如jquery的ajax请求格式如下:
$.ajax({
url:'请求接口地址',
type:'get',
dataType:'json',
error:function(){
},
success:function(){
},
});
实际开发步骤:
- 编写接口并按条件返回数据
- AJAX请求接口操作并处理数据
3.2案例:实现”排行榜局部动态化”
![]()
编写接口如下,详见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:http://域名/newsList.php?type=2&category_id=1
- 伪静态化URL:http://域名/newsList.php/2/1.html
设置伪静态后通过正则表达式去分析伪静态URL地址,我们可以通过print_r($_SERVER);查看到域名后面的URL信息
![]()
通过这段信息,我们使用正则表达式处理,提取数据

![]()
提取到信息后就根据得到的数据到数据库获取到相应内容

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配置文件配置相关信息

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

最后重启apache服务器
4)案例配置规则
RewriteEngine on RewriteRule ^/detail/([0-9]*).html$/detail.php?id=$1

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

去掉#开启,重启apache服务器
3.4.2 Nginx下rewrite配置
rewrite ^/detail/(\d+)\.html$/detail.php?od=$1 last; 标识 区配的URL 变成的URL
实操:
首先通过命令,找到该文件,并编辑它
文件目录
![]()
文件名称
![]()
编辑文件
![]()
添加匹配规则

保存,然后找到项目目录,建立对应项目文件,最后记得重启niginx服务,命令如下:
![]()
注意:
- 如果规则不匹配,服务器会返回404
- 伪静态配置能够方便搜索引擎收录,但是不是配置越多越好,配置越多,消耗资源越多,所以要根据具体业务而配置
本文深入探讨了PHP页面静态化技术,包括静态化概念、优化页面响应时间和动态URL的静态形式。详细介绍了纯静态化和局部动态化的实现,如使用buffer、ob_get_contents()和file_put_contents()函数生成静态HTML,以及通过AJAX实现局部动态加载。同时讲解了PHP处理伪静态的方法,如Apache和Nginx服务器下的rewrite配置。


1837

被折叠的 条评论
为什么被折叠?



