包含文件并替换它

时间:2013-04-26 12:07:31

标签: php caching include exit

我有一个缓存功能并获得了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个多重内容。

任何?

2 个答案:

答案 0 :(得分:1)

您可以使用include_once。它会强制include只运行一次。那是你在找什么?

答案 1 :(得分: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>