简介
PHP的静态化就是将一些不常更新的页面静态化,而非通过动态程序从数据库中取出输出到前台。通过此方法可加快页面响应速度和减轻服务器负载压力。
页面静态化操作,包括两种:一种是静态化,一种是伪静态化。静态化又包括:完全静态化和局部静态化。下面逐一进行介绍:
1、 完全静态化:
就是将整个页面进行静态化,可以使用php缓冲区函数,将缓冲区内容输入到静态文件中。并设置过期时间,若静态文件超出过期时间,则重新进行静态化。
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(); //刷出缓冲区内容并结束缓冲 }
另一种方法如下:
这是需要替换的页面
demo %demo%
PHP页面的静态化很有必要,尤其是在CMS系统中,一些内容一旦生成,基本上不会有变化,这时如果用html将页面静态化,无疑会减少服务其解析PHP页面的负担。以下是看书学来的PHP静态化技术,记录之以备不时之需。
无论是利用框架还是简单的脚本,原理基本一致:就是利用PHP进行文件操作,替换html模板中的动态元素,不仅能提高用户的访问速度还能让php与html分离,使代码更具有维护性。
用到的文件操作函数:
fopen() -------------------- 打开一个文件 函数有两个参数: 1.打开文件的路径和文件名 2.打开文件所用的模式(字符串形式) 这里用到了r 和 w r代表只读 w代表只写
feof() -------------------- 读取文件直到文件末尾 这个函数会在读取到文件的末尾返回true 那么就可以用while知道何时读完文件;函数有一个参数,1.打开的文件指针
fwiter() -------------------- 写入文件内容,函数有三个参数:1.写入的文件名称 2.写入的内容 3.(可选) 写入的最大字符数
fclose() ------------------------ 关闭文件;一般做完所有操作后必须关闭文件;
注意事项: 需要注意文件的路径;以及读取文件所需要的权限 ;
生成文件名称及路径 *html=>需要读取的静态资源 *stsyem=>要替换的标签 *content=>标签替换的内容 * */ $cfill = fopen($r["html"],"r");//读取的文件名 $cfillnew = fopen($r["route"],"w"); while(!feof($cfill)){ $row = fgets($cfill); $res = str_replace($r["stsyem"],$r["content"],$row); //替换内容 fwrite($cfillnew,$res);//写入html文件 } /*关闭文件*/ fclose($cfill); fclose($cfillnew); } } $f = new textHtml; $fillname = microtime().".html"; $content = "这是一个页面静态化技术"; $r["route"] = $fillname; $r["html"] = "index.html"; $r["stsyem"] = "%demo%"; $r["content"] = $content; $f->fwriteHtml($r);局部静态化
在完全静态化的基础上,通过ajax处理局部页面。譬如:新闻页如何实现点击量的更新问题?
答:页面的点击量可通过ajax实现,若ajax请求成功,会使当前redis总数量+1,请求成功后会通过jquery,将该静态页面的数量信息进行更新。然后,通过crontab定时任务,定期将redis的数据更新到数据库中。伪静态
指在访问某个页面时时候,若该页面可以正常访问,则通过URL Rewrite的方式进行显示。
譬如:如下通过开启apache的rewrite模块实现。在httpd.conf中去掉 LoadModule rewrite_module modules/mod_rewrite.so前的”#”。在虚拟站点中配置rewrite规则:
DocumentRoot /var/www/project ServerName static.lukexp.com Options FollowSymLinks AllowOverride None Order Deny,Allow Allow from all RewriteEngine on RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteRule ^/(\w+)/(\d+).htm$ /index.php?act=$1&id=$2
意思是将act=play&id=2的页面改为index.php/play/2.html
静态化的触发方式
静态化有多种触发方式。
根据过期时间,生成新的静态化页面
若文章信息发生编辑,则重新生成静态页面
也可以通过一键更新(类似dedecms方式),其实就是一个php脚本根据数据库信息不断生成新的静态页。
还可以定时任务进行更新,使用window的计划任务或者Linux的cronjob,定期更新静态页。