简介
PHP的静态化就是将一些不常更新的页面静态化,而非通过动态程序从数据库中取出输出到前台。通过此方法可加快页面响应速度和减轻服务器负载压力。
页面静态化操作,包括两种:一种是静态化,一种是伪静态化。静态化又包括:完全静态化和局部静态化。下面逐一进行介绍:
完全静态化
就是将整个页面进行静态化,可以使用php缓冲区函数,将缓冲区内容输入到静态文件中。并设置过期时间,若静态文件超出过期时间,则重新进行静态化。
<?php
//页面静态页,一般在MVC框架的控制器中实现。
//譬如:www.test.php/news/view?id=2
//静态化为 www.test.php/news/view_2.html
//静态化页面路径
$id = isset($_GET['id']) ? $_GET['id'] : 0;
$filePath = "./news/view_".$id.".html";
//过期时间10s
$expire = 10;
if (file_exists($filePath)) {
$ctime = filectime($filePath);
if (time()-$ctime > 10) {
//已过期,删除原有文件,并生成新的静态页
unlink($filePath);
ob_start();
include ("./view2.html"); //加载信息页
$content = ob_get_contents();
file_put_contents($filePath, $content); //将缓冲区内容输出到静态页
ob_end_flush(); //刷出缓冲区内容并结束缓冲
} else {
include($filePath);
}
} else {
ob_start();
include ("./view2.html"); //加载信息页
$content = ob_get_contents();
file_put_contents($filePath, $content); //将缓冲区内容输出到静态页
ob_end_flush(); //刷出缓冲区内容并结束缓冲
}
局部静态化
在完全静态化的基础上,通过ajax处理局部页面。譬如:新闻页如何实现点击量的更新问题?
答:页面的点击量可通过ajax实现,若ajax请求成功,会使当前redis总数量+1,请求成功后会通过jquery,将该静态页面的数量信息进行更新。然后,通过crontab定时任务,定期将redis的数据更新到数据库中。
伪静态
指在访问某个页面时时候,若该页面可以正常访问,则通过URL Rewrite的方式进行显示。
譬如:如下通过开启apache的rewrite模块实现。
在httpd.conf中去掉 LoadModule rewrite_module modules/mod_rewrite.so前的”#”。在虚拟站点中配置rewrite规则:
<VirtualHost *:80>
DocumentRoot /var/www/project
ServerName static.lukexp.com
<Directory '/var/www/project'>
Options FollowSymLinks
AllowOverride None
Order Deny,Allow
Allow from all
</Directory>
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^/(\w+)/(\d+).htm$ /index.php?act=$1&id=$2
</VirtualHost>
意思是将act=play&id=2的页面改为index.php/play/2.html
静态化的触发方式
静态化有多种触发方式。
-
根据过期时间,生成新的静态化页面
-
若文章信息发生编辑,则重新生成静态页面
-
也可以通过一键更新(类似dedecms方式),其实就是一个php脚本根据数据库信息不断生成新的静态页。
-
还可以定时任务进行更新,使用window的计划任务或者Linux的cronjob,定期更新静态页。
参考自:php静态化实现思路