2012-10-11 3 views
1

전자 상거래 플랫폼 용 캐시 시스템을 만들고 싶습니다.ob_start()를 해독하고 일부 태그 다음에 계속하는 방법

페이지 끝에 ob_start('callback')ob_end_flush()을 사용하도록 선택했습니다.

방문한 URL에 대해 작성된 .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(); 
?> 

감사합니다.

답변

1

이렇게하면 이전에 배치 된 HTML보다 먼저 내용이 출력됩니다. 원하는 내용은 변수에 내용을 저장 한 다음 % SHOPPING-CART %

과 같은 캐시 "템플릿"파일의 자리 표시자를 사용하는 것입니다. 따라서 실제 캐시되지 않은 내용으로 str_replace로 바꿀 수 있습니다 .

+0

장바구니는 사용자가 로그인하지 않아도 사용할 수 있습니다. 사용자가 로그인하면 캐시가 없으므로 캐시하고 싶지 않은 항목이 모든 페이지에 표시되는 장바구니입니다 . 귀하의 솔루션이 잘 작동 할 것이라 확신합니다. 귀하의 답변에 감사드립니다. 나는 왜 지금까지 이것에 대해 생각하지 않았는지 이해할 수 없다.) –

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; 
?> 

을 그 정말 이해가되지 않습니다하더라도.

1

줄 라키스 솔루션이 모든 길로 가고 있는지 확신 할 수 없습니다.이 변경 사항은 어떻게됩니까?

<?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; 
?> 

는 다시, 확실하지 않은이 많은 이해 ...하지만 당신은 내가 전제로 당신의 이유가있다.

+0

답변 해 주셔서 감사합니다. 내가 요청한 바를 정확히 시도했기 때문에 @ Zulakis +1도주었습니다. 불행히도 오해가 있었고 blue112 솔루션이 최고라고 생각합니다. 비록 내가 당신의 솔루션을 사용하더라도 장바구니는 살아 있지 않을 것입니다. 캐시 파일 –