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