Php部分缓存

时间:2012-04-01 22:20:20

标签: php caching

我想要部分缓存一些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>

可以通过模板完成,但我想直接使用它。因为我想要替代解决方案。

1 个答案:

答案 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");
?>