我想为电子商务平台构建一个缓存系统。
我选择在页面末尾使用ob_start('callback')
和ob_end_flush()
。
我将验证是否为访问过的网址创建了任何.cache
文件,如果有文件,我会打印出其内容。
我的问题是我想保持购物车的实时,所以我不想缓存它。我怎样才能做到这一点?
<?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();
?>
提前谢谢!
答案 0 :(得分:1)
如果你这样做,问题是内容将在之前放置的任何HTML之前输出。您可能想要的是将该内容保存在某个变量中,然后在缓存“模板”文件中使用占位符,例如%SHOPPING-CART%
因此,您可以使用具有真实非缓存内容的str_replace替换它。
答案 1 :(得分: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;
?>
即使这没有意义。
答案 2 :(得分: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;
?>
同样,不确定这有多大意义......但你有我预设的理由。