我想要部分缓存一些php文件。例如
<?
echo "<h1>",$anyPerdefinedVarible,"</h1>";
echo "time at linux is: ";
// satrt not been catched section
echo date();
//end of partial cach
echo "<div>goodbye $footerVar</div>";
?>
所以缓存的页面应该像 (cached.php)
<h1>This section is fixed today</h1>
<? echo date(); ?>
<div>goodbye please visit todays suggested website</div>
可以通过模板完成,但我想直接使用它。因为我想要替代解决方案。
答案 0 :(得分:4)
看看php的ob_start(),它可以缓冲所有输出并保存它。 http://php.net/manual/en/function.ob-start.php
增加: 查看http://www.php.net/manual/en/function.ob-start.php#106275您想要的功能:) 编辑: 这里有一个简单的simpeler版本:http://www.php.net/manual/en/function.ob-start.php#88212:)
这里有一些简单但有效的解决方案:
的template.php
<?php
echo '<p>Now is: <?php echo date("l, j F Y, H:i:s"); ?> and the weather is <strong><?php echo $weather; ?></strong></p>';
echo "<p>Template is: " . date("l, j F Y, H:i:s") . "</p>";
sleep(2); // wait for 2 seconds, as you can tell the difference then :-)
?>
actualpage.php
<?php
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
// Variables
$weather = "fine";
// Evaluate the template (do NOT use user input in the template, look at php manual why)
eval("?>" . get_include_contents("template.php"));
?>
您可以将带有http://php.net/manual/en/function.file-put-contents.php的template.php或actualpage.php的内容保存到某个文件,例如cached.php。然后你可以让actualpage.php检查cached.php的日期,如果太旧了,让它换一个新的,或者如果年轻,只需回显actualpage.php或重新评估template.php而不重建模板。
评论后,这里要缓存模板:
<?php
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
file_put_contents("cachedir/cache.php", get_include_contents("template.php"));
?>
要运行此选项,您可以直接运行缓存文件,也可以将其包含在其他页面上。像:
<?php
// Variables
$weather = "fine";
include("cachedir/cache.php");
?>