来自  资质荣誉 2019-09-20 10:27 的文章
当前位置: 澳门太阳娱乐手机登录 > 资质荣誉 > 正文

页面静态化,PHP页面静态化

buffer 存储数据

2015.8.15

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

 

输出流程

关于优化页面响应时间

内容-->php buffer --> tcp --> 终端

方法:

在PHP ini 文件中有一个output_buffering = on

1.动态页面静态化

获取缓冲区当中的数据 ob_get_contents();

2.优化数据库

    echo 1;    echo '<br/>';    echo ob_get_contents();

3.使用负载均衡

澳门太阳娱乐在线网址 1

4.使用缓存

如果在php.ini文件中output_buffering没有开启可以使用 ob_start()

ob_start() 开启缓冲区

动态页面静态化

PHP如何实现页面纯静态化

如果页面中的一些内容不经常改动,动态页面静态化是非常有效的加速方法。

基本方式:

实质:生成静态的HTML文件

1、file_put_contents()函数:将一个字符串写入文件 返回写入到文件按内的字节数,失败返回FALSE

好处:减少服务器脚本的计算时间,降低服务器的响应时间,减少服务器压力

2、PHP内置缓存机制实现页面静态化 - output_buffering

说明:不适用内容经常变化的应用 如:微博

澳门太阳娱乐在线网址 2

 

澳门太阳娱乐在线网址 3

关于动态URL地址设置静态形式(伪静态)

澳门太阳娱乐在线网址 4

 

如何触发系统生成纯静态化页面

静态化介绍

1、页面添加缓存时间

 

2、手动触发方式

php静态化:纯静态(局部纯静态,全部纯静态),伪静态

3、crontab定时扫描程序

 

页面添加缓存时间

纯静态化案例实现

用户请求页面---->页面时间是否过期----->是 【动态页面并生成一份新的静态页面】

 

                  否

buffer认知

is_file('./index.html') && (time()-filemtime('./index.html') < 1200)

配置:

如果我们的服务器存在这个文件,并且当前时间减去文件最后修改时间 小于 1200秒 认为缓存没有失效,直接加载静态文件。否则重新生成。

buffer就是一个缓冲区,一个内存地址空间,主要用来存储内容

filemtime()获取文件修改时间

 

澳门太阳娱乐在线网址 5

若开启缓冲区便可以将数据先进过buffer缓冲区

手动触发方式

开启方式:在php.ini中修改output_buffering=on

在后台开辟一个功能,针对首页做一个 开始更新,点击开始更新,走的程序是没有if判断最初的纯静态页面实现程序

或者在php代码中使用ob_start();函数

crontab定时扫描程序

ob_get_contents();//获取缓冲区内容

在Linux下,

 

crontab -e 编辑crontab

php如何实现页面纯静态化

*/5****php/data/static/index.php

 

第一个*代表分

基本方式:使用file_put_contents()函数

第二个*代表时

使用php内置缓存机制实现页面静态化 -output_buffering

第三个*代表日

 

第四个*代表月

OB函数

第五个*代表周

ob_start();打开输出控制缓冲

*/5**** */5代表每五分钟

ob_get_contents();返回数据缓冲区内容

*/5****php/data/static/index.php

ob_clean();清空数据缓冲区

告诉Linux服务器每5分钟执行一次这个程序,生成纯静态页面

ob_get_clean();得到当前缓冲区的内容并删除当前输出缓冲区

** * 处理页面静态化业务逻辑 * 有3种方案, 第一:定时(利用crontab来处理)  第二:人为触发 第三:在页面中控制时间来操作*///header("content-type:text/htm;charset=utf-8");if(is_file('./index.html') && (time()-filemtime('./index.html') < 1200)) {    require_once('./index.html');}else {    // 引入数据库链接操作    require_once('./db.php');    $sql = "select * from news where `category_id` = 1 and `status` = 1 limit 4";    try{        $db = Db::getInstance()->connect();        $result = mysql_query($sql, $db);        $newsList = array();        while($row = mysql_fetch_assoc($result)) {            $newsList[] = $row;        }    }catch(Exception $e) {        // TODO    }    ob_start();    require_once('template/index.php');    $s = ob_get_contents();    file_put_contents('./index.html', $s);    //ob_clean();}

 

局部动态化

实现方式:使用ob函数获得缓冲内容,再使用file_put_contents()写入html文件

实现步骤:编写接口-->ajax请求接口操作

 

静态化页面中如果想加载动态的内容如何处理?

1.链接数据库去的数据

ajax技术

2.将获取的数据填充到模板文件中

jquery中ajax请求方式

3.需要把动态页面转为静态页面,生成静态化文件

$.ajax({    url: '',  //请求服务器端的接口地址    type: 'get',    dataType: 'json',    error: function(){    },    success: function{    }})

 

伪静态

第三步:

分析:通过正则表达式去分析伪静态URL地址

  1. ob_start();
  2. require_once('./templates/index.htm');
  3. if(file_put_contents('index.html',ob_get_clean())){
  4. echo 'success';
  5. }
  6. else{
  7. echo 'error';
  8. }

例: =>

如mycms

其中: 2-->type=2, 1-->category_id=1

 

$_SERVER:服务器当中的server变量 print_r

如何触发系统生成纯静态化页面

其中[PATH_INFO]的值 => /2/1.html

模板文件关键代码(模板文件虽然定为.php文件,但是是html的格式)

澳门太阳娱乐在线网址 6

  1. <divclass="plan_1"><imgsrc="/template/public/image/plan.png">新闻条目XXXXX</div><!--项目目录-->
  2. </div>
  3. <divstyle="width:325px;float:right; margin-top:10px;">
  4. <?php foreach($data as $k=>$v){?>
  5. <dlclass="Grey"style="background-image:url(/template/public/image/1yellow.png)">
  6. <dtstyle="margin-left:70px; padding-top:10px;"><?php echo $v['title']?></dt>
  7. <ddstyle="margin-left:70px"><?php echo $v['content']?></dd>
  8. </dl>
  9. <?php }?>
  10. </div>

澳门太阳娱乐在线网址 7

1.页面添加缓存时间

preg_match()函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。

  1. <?php
  2. //filemtime()获取文件的最近修改时间 判断文件是否有效300秒
  3. if(is_file('./index.html')&&(time()-filemtime('./index.html'))<300){
  4. require_once('./index.html');//直接显示该静态页面
  5. }else{
  6. require_once('./db.php');//获取数据类
  7. $connect=Db::getInstance()->connect();
  8. $sql="select * from news order by id desc";
  9. $result=mysql_query($sql,$connect);
  10. $news=array();
  11. while($row = mysql_fetch_array($result)){
  12. $news[]=$row;
  13. }
  14. //开启缓冲区
  15. ob_start();
  16. //引入模板文件
  17. require_once('./templates/index.php');
  18. file_put_contents('./index.html',ob_get_contents());
  19. }

语法:

这样访问index.php便会访问到静态页面

int preg_match( string pattern, string subject [, array matches ] )

 

pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推

2.手动触发方式

preg_match("/^//$/", $_SERVER['PATH_INFO'], $pathInfo)

直接调用控制器方法生成静态页面

d 匹配0-9当中的一个数字 d+ 匹配一个或者多个 $pathInfo赋给这个变量

2015.8.17

接着进行匹配

3.crontab定时扫描程序

if(preg_match("/^//$/", $_SERVER['PATH_INFO'], $pathInfo)) {  //var_dump($pathInfo);  $type = $pathInfo[1]; // 类型值  $categoryId = $pathInfo[2]; // 所在栏目值  // 引入数据库链接类  require_once('./db.php');   $sql = "select * from news where `category_id` = ".$categoryId." and `type` = ".$type." order by id desc";  //  提取数据之后组装好放入模板中
  //...} else {    // TODO        }

 

其中$_SERVER['PATH_INFO']

1.使用putty链接上服务器,

澳门太阳娱乐在线网址 8

2.使用crontab -e命令修改crontab文件

/*** 利用PHP正则表达式来处理伪静态* 以http://static.com/newsList.php?type=2&category_id=1 =>  http://static.com/newsList.php/2/1.shtml*///echo 12;var_dump($_SERVER);if(isset($_SERVER['PATH_INFO'])) {    // 解析 /2/1.shtml 匹配pathinfo值,如果没匹配到则数据不合法,若匹配到做相应处理    if(preg_match("/^//$/", $_SERVER['PATH_INFO'], $pathInfo)) {        //var_dump($pathInfo);        $type = $pathInfo[1]; // 类型值        $categoryId = $pathInfo[2]; // 所在栏目值        // 引入数据库链接类        require_once('./db.php');         $sql = "select * from news where `category_id` = ".$categoryId." and `type` = ".$type." order by id desc";        try{            $db = Db::getInstance()->connect();            $result = mysql_query($sql, $db);            $newsList = array();            while($row = mysql_fetch_assoc($result)) {                $newsList[] = $row;            }            var_dump($newsList);            exit;        }catch(Exception $e) {            // TODO        }    } else {        // TODO        die('url error!');    }} else {    // TODO    // 错误提示,然后跳转到首页处理    die('地址有误');}

3.输入*/1 * * * * php /data/state/index.php (每一分钟执行index.php的程序)

WEB服务器rewrite配置 达到伪静态的目的

 

apache下rewrite配置

局部动态化案例实现

1、虚拟域名配置

静态化页面中如果想加载动态的内容如何处理。。

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

ajax技术

虚拟域名配置:

 

C:workwamp64binapacheapache2.4.17conf 下httpd.conf

伪静态

1、httpd.conf文件中开启相关模式

 

LoadModule rewrite_module modules/mod_rewrite.so

php处理伪静态

Include conf/extra/httpd-vhosts.conf

 

vhosts文件增加相关域名 (ServerName)

path_info模式,(nginx服务器默认不支持path_info模式,需要配置才可以)

C:workwamp64binapacheapache2.4.17confextra ---> httpd-vhosts.conf --->ServerName

  1. <?php
  2. /*
  3. 通过正则表法师去分析伪静态URL地址
  4. http://state.com/newList.php?type=2&category_id=1
  5. 转为 http://state.com/newList.php/2/1.html
  6. */
  7. // /2/1.html
  8. if(preg_match('/^/(d+)/(d+).html/',$_SERVER['PATH_INFO'],$arr)){
  9. $type=$arr[1];
  10. $category_id=$arr[2];
  11. }else{
  12. //todo
  13. }
  14. print_r($arr);
  15. //print_r($_SERVER);

2、httpd_vhosts.conf配置文件配置相关信息(虚拟域名的配置文件)

 

DocumentRoot: 项目目录

WEB服务器rewrite配置以及案例

ServerName:虚拟域名

 

继续配置hosts文件:C:WindowsSystem32澳门太阳娱乐在线网址,driversetc hosts

apache下rewirte配置

伪静态配置案例:

 

httpd-vhosts.conf 下配置

1.虚拟域名配置

  RewriteEngine on //开启

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

  RewriteRule^/detail/.html$ /detail.php?id=$1 //规则

        LoadModule rewrite module modules/mod_rewrite.so

  $1 是

        Include conf/extra/httpd-vhost.conf

  例:state.com/detail/134.html == state.com/detail.php?id=134

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

澳门太阳娱乐在线网址 9

        该vhost文件是在上面中配置好的conf文件

 #RewriteCond 两句话的意思 执行纯静态化内容

        然后在C:WindowsSystem32driversetc 中的host文件中便配置好的虚拟域名

  -d 代表目录

  2.伪静态配置

  -f 代表文件

        在vhost中,在虚拟域名下面加入

  意思:当我们服务器存在这个目录或者存在这个文件,这时候就让他去访问这个目录或者文件。。没有就会访问动态内容。

       在虚拟域名的根标签

nginx下rewrite配置

 

  rewrite ^/detail/.html$ /detail.php?id=$1 last;

        RewriteEngine on

   rewrite 匹配规则 对应到的动态文件

       RewriteRule ^/test_wei/([0-9]*).html$ /test_wei.php?id=$1nginx下rewrite配置

虚拟机或者服务器下 /etc/nginx/conf.d文件下

 

static.singwa.com.conf文件

        再此,若该目录下有test_wei/1.html的静态页面时,访问却是会访问到伪静态页面

澳门太阳娱乐在线网址 10

        所以还需要配置,一下信息,使若有静态页面,先访问到静态页面

        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d

        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f

 

nginx下rewrite配置

 

rewirte ^/test_wei/(d+).html$ /test_wei.php?id=$1 last;

 

本文由澳门太阳娱乐手机登录发布于 资质荣誉,转载请注明出处:页面静态化,PHP页面静态化

关键词: