php纯静态化技术之ob缓存详解

Posted PHP技术拓展

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php纯静态化技术之ob缓存详解相关的知识,希望对你有一定的参考价值。

重点:

    php程序执行完毕会把相关的静态内容先输出到“php缓冲区[内存级]”里边,然后在输出给用户浏览器供访问。通过ob_XXX相关的函数可以把该 缓冲区 的内容给获得出来,并存储到一个文件里边即可。如果通过ob相关函数清除了php缓存区内容,则页面无输出。


1. 什么是静态化   

    php语言是动态语言

    html/css/js 称为静态语言

    把“动态语言”变为“静态语言”的过程就是“静态化”。

    静态化使用场合:新闻页面、文章等宣传性的页面适合做静态化



2. 为什么使用静态化

① 节省phpmysql相关的服务器资源

② 加快用户的请求

③ 各种seo搜索引擎更喜欢收录静态页面(提升网站的知名度)


3. 静态化原理

php程序执行完毕会把相关的静态内容先输出到“php缓冲区[内存级]”里边,然后在输出给用户浏览器供访问。通过ob_XXX相关的函数可以把该 缓冲区 的内容给获得出来,并存储到一个文件里边即可。

php纯静态化技术之ob缓存详解

示例:

    php代码写一段动态代码

php纯静态化技术之ob缓存详解

    用户浏览器输出:

php纯静态化技术之ob缓存详解

    从缓存区中提取的html静态文件:

php纯静态化技术之ob缓存详解

    下面我们写完文件之后清除ob缓存区的内容,发现,hmtl文件还是可以写入对应文件,而用户页面输出什么都没有,所以,php生成的静态代码先进入缓存区,在输出给用户浏览器。

php纯静态化技术之ob缓存详解

php纯静态化技术之ob缓存详解

4.ob缓存相关函数:

开启缓冲

    ob_start()    开启多个/php.ini

    php.ini中,指定字节数就是开始,给定off就是关闭ob缓存

php纯静态化技术之ob缓存详解

    

获取内容:

        ob_get_contents();  //获取

        ob_get_clean();     //获取后清空

        ob_get_flush();     //获取刷新

(flush:把php缓冲区内容给弄出来提供给用户浏览器显示,不使用flush内容最后也会从php缓冲区里边自然输出提供给用户)

清空

        ob_clean()      //删除缓冲区内容

        ob_get_clean(); //获取并删除缓冲区内容

        ob_end_clean(); //清空并关闭缓冲区

 

    刷新

        ob_flush()          //数据向下推送

        ob_get_flush();     //获取内容并推送内容

        ob_end_flush();     //推送内容并关闭缓冲区

        (没有调用flush时,每个php脚本结束后会自动flush刷新输出给用户)

 

    关闭

        ob_end_clean();     //清空关闭

        ob_end_flush();     //刷新关闭

5.案例应用(简单说明)

    添加商品的同时就该商品制作一个静态页面,之后前台来访问该页面。访问商品详情页的时候就不需要经过php、数据库,直接访问静态页面即可。

    1.后台添加商品是生成对应的商品detail展示静态文件。

   步骤:   

    (1)开启php缓冲区

    (2)查询商品信息并传递给模板

    (3)展示前台商品详情页面

    (4)收集内容、并制作静态文件

    (5)删除php缓冲区内容并关闭缓冲区(删除缓存区则不会输出显示)

php纯静态化技术之ob缓存详解

php纯静态化技术之ob缓存详解

    2.前台访问直接调用静态页面

 之前是点击直接调用php访问数据库生成,现在直接调用静态页面文件即可。(smarty引擎)

php纯静态化技术之ob缓存详解

6.局部不静态化

    上面的应用直接将所有的文件都进行了静态化,但在实际应用中还有一小部分动态信息不能使用静态化,如:当前登录者的信息等等,这时候我们就要使用局部不静态化来获取。

    使用ajax对局部不静态的数据进行请求获取,并追加到页面上。


    简单示例(示意)

php纯静态化技术之ob缓存详解

php纯静态化技术之ob缓存详解


7.说明

header()/session_start()/setcookie()等函数进行使用的时候前边不能有输出信息,否则报错。如果三个函数使用之前必须有输出。解决:把php缓冲区打开即可。


以上是关于php纯静态化技术之ob缓存详解的主要内容,如果未能解决你的问题,请参考以下文章

php利用ob缓存机制实现页面静态化方法全解

php使用ob缓存来实现动态页面静态化

实现静态化

PHP缓存技术

php缓存技术总结

PHP缓存技术