PHP 页面实现静态化

阅读量:1220

发布时间:2015-10-20 20:49:37


一、什么是页面静态化

就是把所有不是.htm或者.html的页面改为.htm或者.html。

页面静态化不等于页面纯静态。

 

二、为什么要进行页面静态化

  1. 搜索引擎的优化(SEO) 静态化的页面方便百度的抓取(百度抓不抓取谁又知道呢?)
  2. 减少服务器压力(动态网页与数据库交换频繁、减少服务器不必要的运算)
  3. 加速页面打开速度
  4. 网站更加的安全,不受php漏洞影响,减少SQL注入
  5. 数据库奔溃了以后网站还能正常运行

 

三、页面静态化的方式

  1. 纯静态页面 当用户访问的时候不需要进过服务器解析,直接将服务器上的(html)文件传到客户端,不需要解析就能直接访问(比动态网页执行速度快)。
  2. 页面静态化 将动态的网页生成(一般以.shtml结尾的)文件,也就是将动态网站生成静态网站来保存。
  3. 伪静态 动态URL地址设置静态形式,将访问路径(url 以.html结尾)实际上是执行服务器上的动态程序(.php .asp .jsp)。

 

四、实现页面静态化的三种方法

  1. 页面添加缓存时间(根据文件的被修改的时间判断是否需要重新更新页面)
  2. 手动触发(手动执行.php程序,更新页面)
  3. crontab定时扫描程序(linux crontab命令 定时任务)。

 

五、php实现页面静态化的原理

一般客户端请求一个网站的时候都会有以下流程

内容 → php → buffer → tcp → 终端

buffer:是一个缓冲区,当打开一个文件的时候都是先将文件写入缓冲区,然后是页面调用,实现页面静态化也是对buffer一个操作。

 

六、php相关函数

函数 说明
ob_start() 打开输出缓冲区。(php.ini的配置文件已经将 output_buffering = on 开启可以不用写这个函数)
ob_get_contents() 返回缓冲区的内容。
ob_clean 清空(擦掉)输出缓冲区。
ob_get_clean 得到当前缓冲区的内容并删除当前输出缓冲。
is_file() 判断给定文件名是否为一个正常的文件。is_file('./teacher.html')
filemtime() 获取文件修改的时间。filemtime('./index.shtml')
file_put_contents() 将一个字符串写入文件.file_put_contents(('teacher.html'), "写入的数据");返回值是文件的字节数。

 

七、实例

实现,index.html页面时间生成的是否小于五分钟,若是小于直接显示index.html,否则打开index_html.php程序重新生成index.html并输出生成以后的结果。

index_html.php是一个简单的利用 Leibniz定理就算PI的值(没有考虑PHP变量的精确长度)显示脚步的生成时间,和计算时间

新建index.php

    date_default_timezone_set('PRC'); 

    ob_start(); //开启缓冲区  php.ini配置文件中开启以后可以不写
    if ( is_file('index.html') && (time()-filemtime('index.html') < 5*60) ){  //判断静态页面是否存在  以及生成时间是否小于 五分钟
        require_once('index.html');  //条件满足的时候直接访问静态页面
    }else{
        require_once('index_shtml.php');
        file_put_contents(('index.html'), ob_get_contents());  //   file_put_contents 将一个字符串写入文件    
    }

 

index_shtml.php

<?php 
    date_default_timezone_set('PRC'); 
    // Leibniz 公式计算圆周率 $value 计算次数
    function Leibniz_PI($value )
    {
        $i = 0; // 计次
        $x = 1; // 下标
        $sum = 0.0; // PI/4的值

        while ( $i <= $value) {
            if($i%2 == 0){
                // +
                $sum = $sum + 1/(2*$i + 1);
            }else{
                $sum = $sum - 1/(2*$i + 1);
            }
            $i = $i + 1;
        }

        return $sum * 4;
    }
 ?>

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>页面静态化</title>
 </head>
 <body>
     <p>
         文件生成时间:
         <?php 
             $time = date('Y-m-d H:i:s',time());
             echo $time;
          ?>    
     </p>
     <?php 
        $time_1 = microtime();
        echo Leibniz_PI(10);
        echo "<br>";
        echo Leibniz_PI(100);
        echo "<br>";
        echo Leibniz_PI(1000);
        echo "<br>";
        echo Leibniz_PI(10000);
        echo "<br>";
        echo Leibniz_PI(10000);
        echo "<br>";
        $time_2 = microtime();
        echo "运行时间:".($time_2 - $time_1)."微秒";
      ?>
 </body>
 </html>

运行结果:










当前没有评论