PHP 实现页面静态化
PHP文件执行阶段:语法分析-》编译-》运行
静态html文件执行顺序:运行
动态程序:
连接数据库服务器或者缓存服务器->获取数据->填充到模板->呈现给用户
关于优化页面响应时间
- 动态页面静态化
- 优化数据库
- 使用负载均衡
- 使用缓存
1. 动态页面静态化:页面中一些内容不经常改动
不适用于内容经常变换的应用:例如:微博等。如果页面中一些内容改动,动态页面静态化是非常有效的加速方法。
动态页面静态化好处:
- 减少服务器脚本的计算时间
- 降低服务器的响应时间
2. 动态URL地址设置静态形式(伪静态)
3. php静态化: 1.纯静态:
a. 局部纯静态
b. 全部纯静态
2. 伪静态
4.Buffer认知(php.ini文件中output_buffering=on开启缓存区,ob_start()也可以开启缓存区)
a) Buffer其实就是缓冲区,一个内存地址空间,主要用于数据存储区域。
b)输出流程:内容-》php buffer->tcp->终端
c)获取缓冲区内容:php内容函数 ob_get_contents();
d)ob_start():开启缓冲区(php5.3默认开启output_buffering=on)
5.php如何实现页面纯静态化
a)基本方式
i.file_put_contents()函数:将一个字符串写入文件
file_put_contents(“文件名”,”文件内容”);
ii.使用PHP内置缓存机制实现页面静态化-output_buffering
OB函数
a) ob_start :打开输出控制缓冲
b) ob_get_contents:返回输出缓冲区内容
c) ob_clean:清空(擦掉)输出缓冲区
d) ob_get_clean:得到当前缓冲区的内容并删除当前输出缓冲区
<?php
ob_start();
echo 1234;
file_put_contents('index.shtml',ob_get_contents());
?>
在浏览器(终端)输出1234;index.shtml内容是:1234
<?php
ob_start();
echo 1234;
file_put_contents('index.shtml',ob_get_contents);
ob_clean();
?>
浏览器终端不会再有1234输出,静态页面index.shtml输出依旧是1234。理解php输出流程:内容->php buffer->tcp->终端, ob_clean();
<?php
ob_start();
echo 456789;
file_put_contents('index.shtml',ob_get_clean());
?>
浏览器终端无输出,静态文件index.shtml内容是:456789,ob_get_clean()相当于ob_get_contents()和ob_clean()两个的作用。
b)纯静态化案例之步骤解析
i. 链接数据库,然后从数据库里面获取数据
ii. 把获取的数据填充到模板文件里面
iii. 需要把动态的页面转化为静态页面,生成纯静态化文件
<?php
require_once('./db.php'); $connect=Db::getInstance()->connect();
$sql="select * from news limit 5":
$result=mysql_query($sql,$connect);
$news=array();
while($row=mysql_fetch_array($result)){
$news[]=$row;
}
//开启缓存区
ob_start();
//引入模板文件
require_once(./templates/abc.php); if(file_put_contents('index.shtml',ob_get_clean())){
echo 'success';
}else{
echo 'error';
}
?>
模板文件使用$news:abc.php
<ul>
<?php foreach($news as $k=>$v)?>
<li><a href="/" target="_blank"><?php echo $v["title"];?></a></li>
<?php } ?>
</ul>
6.如何触发系统生成纯静态化页面
- 页面添加缓存时间
- 手动触发方式
- crontab定时扫描程序
页面添加缓存时间:
<?php
//filemtime():获得文件修改时间
if(is_file(./index.shtml)&&(time()-filemtime('./index.shtml'))<300){
require_once('./index.shtml');
}else{
require_once('./db.php'); $connect=Db::getInstance()->connect();
$sql="select * from news limit 5":
$result=mysql_query($sql,$connect);
$news=array();
while($row=mysql_fetch_array($result)){
$news[]=$row;
}
//开启缓存区
ob_start();
//引入模板文件
require_once(./templates/abc.php); file_put_contents('index.shtml',ob_get_contents());
}
?>
手动触发方式:后台开发一个功能:更新模块生成html静态页面(按钮)
crontab定时扫描程序(linux系统):Linux服务器一个工具
i. 设置crontab只需要执行一个命令*/5****php/data/static/index.php(每5分钟去执行一个程序)
局部动态化案例实现
a)静态化页面中如何想加载动态的内容如何处理?
Ajax技术:jquery中ajax请求方式$.ajax()
实现步骤:编写接口-》ajax请求接口操作
接口数据:1.获取数据
2. 把我们获取到的数据组装成接口数据通信
<?php
//接口数据
//1.获取数据
//2.把我们获取到的数据组装成接口数据通信
require_once("../db.php");
$connect=Db::getInstance()->connect();
$sql="select * from news limit 5";
$result=mysql_query($sql,$connect);
while($row=mysql_fetch_assoc($result)){
$res[]=$row;
}
return show(1,'success',$res);
function show($code=0,$message="error",$data=array()){
$result=array(
'code'=>$code,
'message'=>$message,
'data'=>$data,
);
echo json_encode($result);
}
?>
模板页abc.php引入ajax文件代码:
code=1是数据返回成功
$.ajax({
url:"http://abc.com/api/hot.php",
type:'get',
dataType:'json',
error:function(){
},
success:function(result){
if(result.code==1){
html='';
$each(result.data,function(key,value){ html+='<li><a href="/">'+value.title+'</a></li>';
}) ;
$("#hot_html").html(html);
}else{
//todo
}
}
});
伪静态
a)php处理伪静态(php的正则表达式方式)
i.(Apache服务器)案例分析(path_info模式)print_r($_SERVER)查看path_info /newsList.php/2/1.html
备注:nginx服务器默认情况下不支持path_info模式,需要配置
- 通过正则表达式去分析伪静态URL地址:http://state.com/newsList.php/2/1.html
- print_r($_SERVER);获得header信息中的PATH_INFO:/2/1.html
<?php
/*
通过正则表达式去分析伪静态URL地址 http://abc.com/newList.php?type=2&category_id=1 http//abc.com/newList.php/2/1.html
2 => type=2 1 => category_id=1
*/
// /2/1.html
if(preg_match('/^\/(\d+)\/(\d+).html'.$_SERVER['PATH_INFO'],$arr)){
$type=$arr[1];
$category_id=$arr[2];
}else{
//TODO
}
?>
ii.WEB服务器rewrite配置达到伪静态
apache下rewrite配置
1.Http.conf文件中开启相关模式
- (apache\Apache2.2.11\conf\httpd.conf,去掉前面的#)
LoadModule rewrite_module modules/mod_rewrite.so
通过phpinfo();设置是否开启成功:
Include conf/extra/httpd-vhosts.conf
ii. vhosts文件增加相关域名
Httpd_vhosts.conf配置文件配置相关信息
- VirtualHost节里面的信息
- 绑定域名:
iii. 伪静态配置案例
RewriteEngine on //开启rewrite引擎
RewriteRule^/detail/([0-9]*).html$/detail.php?id=$1 //设置的一个伪静态规则
state.com/detail/134.html state.com/detail.php?id=134
当服务器项目中存在这个目录或者这个文件,就去访问。否则去访问伪静态文件。
Nginx下rewrite配置
PHP 实现页面静态化的更多相关文章
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
- JSP页面静态化
Ps:好久没写博客了,不是我太懒,是因为苦逼的我出差去上海了,天天加班 刚回成都.... 今天说说jsp页面静态化,知道静态化的朋友都不陌生,说白了就是访问后缀是html 而不是jsp. 没听说过静态 ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)
页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ① 配置php.ini ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(二)
一:页面静态化 几个概念: 静态网址:(比如:http://localhost/abc.html) 特点:1.利用seo(search engine optimization) 搜索引擎优化;2:访问 ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(一)
一:关键技术介绍: 衡量是否为大型网站的要素: A:PV值(page views 页面浏览量) 访问量大: 带来的问题:1:流量大 -->解决方案:增加带宽,优化程序(视频和图片较浪费带宽,尽量 ...
- php页面静态化技术;学习笔记
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C# MVC 页面静态化导致的问题
在设置页面静态化的路由,代码如 //静态路由 routes.MapRoute( name: "html", url: "{controller}/{action}.htm ...
- Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...
- ASP.NET MVC使用SSI来实现页面静态化
页面静态化分为两种:伪静态和真静态,这里主要介绍的是真静态. 进入正题之前先简单介绍一下SSI和shtml: 1).SSI是Server Side Include的简称(服务器端嵌入) 2).shtm ...
- php页面静态化
如何优化页面响应时间: 动态页面静态化 优化数据库 使用负载均衡 使用缓存 如果页面中的一些内容不经常改动,可以使用动态页面静态化.好处是:减少服务器脚本的计算时间:降低服务器的响应时间. 1.动态U ...
随机推荐
- web会话管理
http协议是无状态的协议,也就是说服务器不知道这个http连接是那个浏览器发过来的. 要标识会话的唯一,有两种方法:1 Cookie 2 会话级cookie(开关浏览器算一次会话) 和 持久化的c ...
- PHP非阻塞模式 (转自 尘缘)
让PHP不再阻塞当PHP作为后端处理需要完成一些长时间处理,为了快速响应页面请求,不作结果返回判断的情况下,可以有如下措施: 一.若你使用的是FastCGI模式,使用fastcgi_finish_re ...
- HBase应用开发回顾与总结系列之一:概述HBase设计规范
概述 笔者本人接触研究HBase也有半年之久了,虽说不上深入和系统,但至少算是比较沉迷.作为部门里大数据技术的探路者,笔者还要承担起技术传播的职责,所以在摸索研究的过程中总是不断地进行总结和测试, ...
- android scrollview 实现上下左右滚动方法
原来是scrollview与HorizontalScrollView组合布局 详细可参考:http://blog.csdn.net/aminfo/article/details/7846963
- jQuery 3.0 的变化
时隔 3 个月,jQuery 团队终于发布了 3.0 Alpha 版本.有两个版本 jQuery compat 3.0 和 jQuery 3.0. jQuery compat 3.0 对应之前的 1. ...
- HDU 4578 Transformation --线段树,好题
题意: 给一个序列,初始全为0,然后有4种操作: 1. 给区间[L,R]所有值+c 2.给区间[L,R]所有值乘c 3.设置区间[L,R]所有值为c 4.查询[L,R]的p次方和(1<=p< ...
- Unity 5 WebGL vs Web Player
起原 Unity5.3中看到Web Player未来将到被取消,根据Unity官方blog中称Unity5.4中将会移除web player. 本文从我知道的知识比较一下webPlayer和WebGL ...
- string、math类、random随机数、datetime、异常保护
今天讲的知识点比较多,比较杂,以至于现在脑子里还有点乱,慢慢来吧... string (1)string.length; (获得你string字符串的长度) (2)a = a.Trim(); 重新赋值 ...
- [No000038]操作系统Operating Systems -CPU
管理CPU ,先要使用CPU… CPU 的工作原理 CPU上电以后发生了什么? 自动的取指 — 执行 CPU 怎么工作? CPU怎么管理? 管理CPU 的最直观方法 设好PC 初值就完事! 看看这样做 ...
- [No000035]操作系统Operating System之OS Interface操作系统接口
接口(Interface) 仍然从常识开始… 日常生活中有很多接口:电源插座:汽车油门… 那什么是接口? 连接两个东西.信号转换.屏蔽细节… Interface: electrical circuit ...