php干货丨深度解析静态化的好处
author:一佰互联 2019-05-25   click:160

静态化的好处:虽然百度表示不歧视动态网址,但是动态带参的网址仍然容易将Baiduspider带入黑洞,从而被百度放弃,不利于SEO。除了利于SEO,页面静态化还能减轻服务器的访问压力,降低数据库的读写压力,利于性能优化。其三,静态化还能防止SQL注入攻击。

 

 

静态化的分类:伪静态和真静态

伪静态化:通过修改URL使得动态URL看上去像静态URL,从而达到亲近搜索引擎的目的。例如:

动态URL:http://localhost/news.php?lang=cn&class=1&id=2

静态URL:http://localhost/news-cn-sport-id2.html

真静态化通过模版引擎生成静态html文件或通过ob缓存静态化。

 

【注】页面静态化需要伪静态化和真静态化结合使用,从而达到最终静态化的目的。静态化虽好,但不是所有地方都适用,需要自行判断优劣。

  利用ob缓存实现真静态化详解:

 



Ob缓存php自带的缓存,默认开启,可以在php.ini文件中查看是否开启。如果ob缓存关闭,那么只有程序缓存,header函数前输出任何内容都会导致程序报错。

Php中操作ob缓存的相关函数:

//开启ob缓存

ob_start();

//把ob内容缓存清空,但是ob缓存还在

ob_clean();

//把ob内容缓存清空,同时关闭ob缓存

ob_end_clean();

//把ob缓存的内容,刷新到程序缓存,同时关闭ob缓存

ob_end_flush();

//把ob缓存的内容,刷新到程序缓存,不关闭ob缓存

ob_flush(); 

//获取ob缓存内容

$con=ob_get_contents();

//需要把静态页,写入文件. echo print_r var_dump,写文件,下断点.

file_put_contents("d://test.html",$con);

该函数是把 程序缓存的内容,强制刷新到浏览器

// flush();

 

下面是一个新闻发布系统,类似这种一旦发布更新不大的系统非常适合静态化。

 

静态化的时机可以选择发布时,或者第一次查看。由于后台发布系统和前台查看系统在两台不同的服务器上,因此本例是在第一次查看的时候静态化的。数据库中除了必要的标题、内容字段外,另外新增了一个静态化标志,用于判断是否静态化。新闻新增和修改的时候会置为0静态化的时候会置为1

代码逻辑结构:

外层if判断服务器中静态文件是否存在,以id命名。

如果存在

内层if判断静态化标志是否为1

如果为1(表示已经静态化,且无修改)

直接返回该文件;

如果不为1(表示未静态化,有修改)

打开ob缓存,读取文章内容,和模版信息,生成要返回的html代码,并把内容输出到html文件中,更新静态化标志为1,重定向到静态html文件。

如果不存在

打开ob缓存,读取文章内容,和模版信息,生成要返回的html代码,并把内容输出到html文件中,更新静态化标志为1,重定向到静态html文件。

具体代码如下: