静态缓存

静态页面缓存的原理:

//php在解析完当前这个页面之后,它会把要生成的这些静态的内容,先把它放在服务器的内存里面,然后再把它发送到客户端浏览器来执行显示。

<?php

//下面要操作内存了
$filename = "../cache/test.html"; 
//$filename代表的是当前的这个test.php页面缓存文件存放的位置。也就是要把缓存文件存放在哪个位置。
//也就是定好一个缓存文件的地址。
$youxiao = 3;  //定义缓存有效期为3秒。 如果超过时间超过这个有效期就需要从新查数据库更新一遍信息。


//filemtime($filename)是文件的上次修改时间。

//只有当缓存文件存在并且缓存没有超过有效期。
if(file_exists($filename) && (filemtime($filename)+$youxiao)>time())//加个有效期来判断通过这个文件存在,并且是在有效期之内才能读
{    //如果存在,就直接读取缓存文件
    include($filename);                //把缓存文件直接拿进来就可以显示了
}else{
    ob_start();    //开启内存缓存   
    //开启后这句代码下面的所有即将要执行的代码产生内存后不会被清除掉。先保留在内存里面。


    
    require "../DBDA.class.php";
    require "../init.inc.php";

    $db = new DBDA();
    $sql = "select * from info";
    $arr = $db->query($sql);

    $smarty->assign("shuju",$arr);

    $smarty->display("test.html");                 //调用display方法来显示模板文件
    //这时候只要在括号内给出模板的路径,模板就可以显示了。



    //上面代码执行完成后会在内存里面产生一个解析好的静态页面,这个静态页面即将输出给浏览器来执行。
    //在它输出之前,把内存里面的内容通过ob_get_contents();方法获取出来

     $str = ob_get_contents();     //获取内存中的静态页面。

     
     //file_put_contents();是指往文件里面写内容。
     file_put_contents($filename,$str);   //将获取到的内容写入到缓存文件
     
     ob_flush();//输出内存并且释放。  相当于把把内存里的文件清空了。
     
     //执行第一次的时候,我把内容缓存下来。在执行第二次的时候,如果发现缓存文件存在的话,就直接调缓存文件过来用
     //就可以了所以可以在上面加个判断if,判断缓存文件是否存在。
     echo "#######################";
     
     //如果页面下方出现了一排#####################说明走的不是缓存文件。
     //如果页面下方没有出现##########################说明走的是缓存文件。
     
     
}

造一个分页的缓存:

.php页面

<?php

$page = 1;
if(!empty($_GET["page"])){
    $page = $_GET["page"];
}

$filename = "../cache/fenye{$page}.html";
$sj = 30;

if(file_exists($filename) && (filemtime($filename)+$sj)>time()){
    include($filename);
}else{
    ob_start();
    require "../DBDA.class.php";
    require "../init.inc.php";
    require "../page.class.php";
    $db = new DBDA();
    
    $sql = "select count(*) from nation";
    $zts = $db->strquery($sql);
    $page = new Page($zts,3);
    
    

    $sql = "select * from nation ".$page->limit;
    $arr = $db->query($sql);

    $smarty->assign("shuju",$arr);
    $smarty->assign("fenye",$page->fpage());
    $smarty->display("fenye.html");
    
    $str = ob_get_contents();
    file_put_contents($filename,$str);
    ob_flush();
    
    echo "###########################";
}

.html页面

<body>

<table width="100%" border="1">
    <tr>
        <td>代号</td>
        <td>名称</td>    
    </tr>

    <{foreach $shuju as $v}>
    <tr>
        <td><{$v[0]}></td>
        <td><{$v[1]}></td>
    </tr>
    <{/foreach}>
    
</table>

<div><{$fenye}></div>

</body>
</html>
原文地址:https://www.cnblogs.com/shandayuan/p/7402480.html