zoukankan      html  css  js  c++  java
  • 利用PHP的ob函数实现生成静态化页面

    之前用过一些开源的CMS管理系统,当时就很好奇后台中的生成HTML静态文件是怎么实现的。今天和同事讨论了下,没想到同事之前做过这类的生成静态页面的功能,果断向他请教了下。

    经他讲解后,才知道其实生成静态HTML页面很简单。PHP提供了专门的函数来实现。

    以下整理出方法(实现生成html这应该只是其中一种方法):

    通过php的ob缓存来实现
    提高速度
    1,通过php的ob缓存来实现
    使用php的ob缓存实现页面静态化
    修改php.ini配置文件
    output_buffering=Off
    1,缓存:smarty缓存, ThinkPHP框架的缓存,PHP的ob缓存
    (1)ob---缓存,先将输出的数据呢,缓冲到一块空间
    然后显示的时候再显示这块空间的缓存的数据
    1,ob_start() 先将输出的数据优先放入到 ob缓存中
    2,ob_clean() 清空缓存,但是没有关闭
    3,ob_end_clean() 清空缓存,同时也关闭缓存
    4,ob_flush() 将ob缓存的数据,输出到程序缓存
    5,ob_end_flush() 将ob缓存的数据输出到程序缓存并且关闭ob缓存
    (1)程序缓存
    就是如果没有开启ob缓存,先将数据缓存到程序中,等echo都完了,再统一的输出
    浏览器也有缓存:
    浏览器先攒着数据,等达到一定的数量之后(ie 500多MB)的时候才输出

    代码如下:

     1 <?php
     2     header('Content-type:text/html; charset=utf-8');
     3     /**
     4         ob_start():是打开缓冲区的,就是要把您需要生成的静态文件的内容缓存在这里; 
     5         ob_get_contents():是读出缓冲区里的内容,下面有代码为例; 
     6         ob_end_clean():这个比较重要,只有使用了这个函数后,缓冲区里的内容才会读取出来
     7         
     8     */
     9     if(file_exists('./index.html')) //静态index.html文件是否存在
    10     {
    11         $time = time(); //文件修改时间和现在时间相差的话,直接导向html文件,否则重新生成htm
    12         
    13         if($time-filemtime('./index.html') < 60)
    14         {
    15             header('Location:./index.html');
    16         }
    17     }
    18     
    19     //开始处加入ob_start();
    20     ob_start(); //开启php的ob缓存,这些数据放到ob缓存中,没有开启ob缓存,然后放到程序缓存中
    21     
    22     //动态部分内容
    23 ?>
    24     <html>
    25         <head>
    26             <meta charset="utf-8" />
    27             <title>Hello</title>
    28             <style>
    29                 body{ background:black;color:white;font-size:20px;}
    30             </style>
    31         </head>
    32         <body>
    33             <p align="center">PHP生成HTML文件....</p>
    34         </body>
    35     </html>
    36 <?php
    37     //在结尾加入ob_end_clean(),并把本页输出到一个变量中
    38     $htmlStr = ob_get_contents(); //获得缓存中的数据
    39     ob_end_clean();
    40     
    41     //写入文件
    42     $fp = fopen('./index.html', 'w');
    43     fwrite($fp, $htmlStr) or die('写文件错误');
    44     
    45     echo "生成HTML完成!";
  • 相关阅读:
    MVC4.0系统开发新手历程1
    hdu1205(类似 分布垃圾数列)
    python manage.py startapp app 时候报错No module named _sqlite3
    delphi 文件夹权限设置(执行一个小脚本的笨办法)
    FreeBSD 10安装KDE桌面环境简介(亲测bsdconfig命令有效)
    Qt的目录依赖问题----怎样生成一个绿色的Qt软件包
    Qt5位置相关函数异同详解(附源码)
    Qt 设置背景图片3种方法(三种方法:QPalette调色板,paintEvent,QSS)
    简单实现android和wp聊天
    进程间通讯之mmap文件共享
  • 原文地址:https://www.cnblogs.com/ym1992it/p/4132234.html
Copyright © 2011-2022 走看看