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配置
来源:https://www.cnblogs.com/Ann-wxp/p/4619178.html