0

我有一个缓存功能并获得了 HTML 文件。

问题是我想将我的文件包含到我的页面中。

例子 :

<h2>Before</h2>
<?php
cache('start');
// content....
cache('end');
?>
<footer>After</footer>

所以我的缓存功能很简单,比如......

function cache($a,$min=null) {
    global $cachefile;
    $cache_path = "/cached/";
    $file_name = basename(rtrim($_SERVER["REQUEST_URI"],'/'));
    $file_path = 'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $cachefile = $cache_path.sha1($file_path).'.cache';
    if($a == 'start'){
        $lifetime = $min * 60;
            if(file_exists($cachefile)&&time()-$lifetime<filemtime($cachefile)){
                include($cachefile);
                exit;
            }
            ob_start();
    }
    if($a == 'end'){$fp=fopen($cachefile,'w');fwrite($fp,ob_get_contents());fclose($fp);ob_end_flush();}
}

问题是...

include($cachefile);
exit;

包含后停止渲染。我试图删除exit,所以我得到了 2 个多个内容。

任何 ?

4

2 回答 2

1

你可以使用include_once. 它将强制包含仅运行一次。那是你要找的吗?

于 2013-04-26T12:11:10.920 回答
0

我现在完成了:D

function cache($a,$min=null) {
    global $cachefile;
    $cache_path = get_template_directory()."/cached/";
    $file_name = basename(rtrim($_SERVER["REQUEST_URI"],'/'));
    $file_path = 'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $cachefile = $cache_path.sha1($file_path).'.cache';
    $lifetime = $min * 60;
    if($a == 'start'){
            if(file_exists($cachefile)&&time()-$lifetime<filemtime($cachefile)){
                include_once($cachefile);
            }
            ob_start();
    }
    if($a == 'end'){
        if(file_exists($cachefile)&&time()-$lifetime<filemtime($cachefile)){
            ob_end_clean();
        } else {
            $fp=fopen($cachefile,'w');
            fwrite($fp,ob_get_contents());
            fclose($fp);
        }
    }
}

所以像这样...

<h2>Before</h2>
<?php
cache('start',10);
// content....
cache('end',10);
?>
<footer>After</footer>
于 2013-04-26T12:46:07.880 回答