PHP 页面实现静态化
阅读量:4007
发布时间:2015-10-20 20:49:37
一、什么是页面静态化
就是把所有不是.htm或者.html的页面改为.htm或者.html。
页面静态化不等于页面纯静态。
二、为什么要进行页面静态化
- 搜索引擎的优化(SEO) 静态化的页面方便百度的抓取(百度抓不抓取谁又知道呢?)
- 减少服务器压力(动态网页与数据库交换频繁、减少服务器不必要的运算)
- 加速页面打开速度
- 网站更加的安全,不受php漏洞影响,减少SQL注入
- 数据库奔溃了以后网站还能正常运行
三、页面静态化的方式
- 纯静态页面 当用户访问的时候不需要进过服务器解析,直接将服务器上的(html)文件传到客户端,不需要解析就能直接访问(比动态网页执行速度快)。
- 页面静态化 将动态的网页生成(一般以.shtml结尾的)文件,也就是将动态网站生成静态网站来保存。
- 伪静态 动态URL地址设置静态形式,将访问路径(url 以.html结尾)实际上是执行服务器上的动态程序(.php .asp .jsp)。
四、实现页面静态化的三种方法
- 页面添加缓存时间(根据文件的被修改的时间判断是否需要重新更新页面)
- 手动触发(手动执行.php程序,更新页面)
- 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>
运行结果:
当前没有评论