1

我想为一个电子商务平台构建一个缓存系统。

我选择在页面末尾使用ob_start('callback')和。ob_end_flush()

我将验证是否.cache为访问的 url 创建了任何文件,如果有文件,我将打印其内容。

我的问题是我想让购物车保持活动状态,所以我不想缓存它。我怎样才能做到这一点?

<?php

    function my_cache_function($content) {
        return $content;
    }

    ob_start('my_cache_function');

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
     test
     <?php
         //some ob_break() ?
     ?>
     <div id="shopping-cart">
         this should be the content I do not want to cache it
     </div>
     <?php
         // ob_continue() ?
     ?>

</body>
</html>
<?php
     ob_end_flush();
?>

先感谢您!

4

3 回答 3

1

你可以这样做:

<?php

    function my_cache_function($content) {
        return $content;
    }
    $output = "";
    ob_start('my_cache_function');

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
     test
     <?php
         $output .= ob_get_clean();
     ?>
     <div id="shopping-cart">
         this should be the content I do not want to cache it
     </div>
     <?php
         ob_start();
     ?>

</body>
</html>
<?php
         $output .= ob_get_clean();
         echo $output;
?>

尽管这实际上没有任何意义。

于 2012-10-11T08:21:13.813 回答
1

如果你这样做,问题是内容将在之前放置的任何 HTML 之前输出。您可能想要将该内容保存在某个变量中,然后在缓存“模板”文件中使用占位符,例如 %SHOPPING-CART%

因此,您可以将其替换为带有真实非缓存内容的 str_replace。

于 2012-10-11T08:19:46.883 回答
1

我不确定 Zulakis 的解决方案是否能顺利进行……这个改动呢?

<?php
$pleaseCache=true;
function my_cache_function($content) {
    if($pleaseCache)
    {
        /// do your caching
    }
    return $content;
}
$output = "";
ob_start('my_cache_function');

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
     test
     <?php
         $output .= ob_get_clean();
         $pleaseCache = false;
         ob_start('my_cache_function');
     ?>
     <div id="shopping-cart">
         this should be the content I do not want to cache it
     </div>
     <?php
         $output .= ob_get_clean();
         $pleaseCache = true;
         ob_start('my_cache_function');
     ?>

</body>
</html>
<?php
     $output .= ob_get_clean();
     ob_end_clean();
     echo $output;
?>

再说一次,不确定这是否有意义......但我假设你有你的理由。

于 2012-10-11T08:48:10.613 回答