영원한사랑

DB 억세스가 많은 인덱스화일을 html로 저장했다가 보여주는 방식의 인덱스화일 캐쉬는 팁텍에서도 여러번 거론 되었던 방법이고 스쿨에서도 이미 사용하고 있는 방법입니다만...

비록 뒷북일지라도...

--------------------------------------------------------------------------------------------------------

function make_cache($file,$script,$duration=60) {
    $limit=time()-$duration*60;
    if(!file_exists($file) || filemtime($file)<$limit) {
        $command="wget --user-agent=\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) \" http://".$_SERVER["HTTP_HOST"].$script." -O ".$file;
        exec($command);
    }
    if(file_exists($file))  @include $file;
}

function new_cache($file,$script) {
        $command="wget --user-agent=\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) \" http://".$_SERVER["HTTP_HOST"].$script." -O ".$file;
        exec($command);
}

--------------------------------------------------------------------------------------------------------

크론을 돌리지 않고도 인덱스화일을 통채로 저장하는 것보다는 몇조각으로 나눠서 저장하는 방법을 사용하고 있습니다.

사용법은
<? include "head.php"; ?>
<tr>
<td width=545 valign=top>
<table valign=top cellpadding=0 cellspacing=0 border=0 width=100%>
<?
$inc=$_SERVER[DOCUMENT_ROOT]."/layout/cache/center.html";
$script="/layout/center.inc" ;
make_cache($inc,$script,5);
?>
</table></td>
<td width=8></td>
<td width=245 valign=top><table valign=top cellpadding=0 cellspacing=0 border=0>
<?
$inc=$_SERVER[DOCUMENT_ROOT]."/layout/cache/right.html";
$script="/layout/right.inc" ;
make_cache($inc,$script,10);
?>
</table></td></tr>
<? include "foot.inc"; ?>

페이지를 몇개로 분할한 다음 각부분을 별도로 캐쉬할 수 있습니다.
시간은 분단위입니다.
하지만 스쿨처럼 글을 쓰고 나서도 초기화면에 나타나지않으면 일종의 불안감을 조성하는 경향이 있어서
글이나 댓글을 입력하는 부분에

$inc=$_SERVER[DOCUMENT_ROOT]."/banner/cache/body.html";
$script="/body.inc" ;
new_cache($inc,$script);

를 추가해주면 즉시 반영이 됩니다.


if(file_exists($file))  @include $file; 부분을
if(file_exists($file))  return file_get_contents($file); 했더니 HTML코드를 소스채 뿌려버리는군요.


include 하는쪽을 캐쉬하는데 변수에따라 달라지는 부분 이라면?
<?echo "<? if(\$member[level]==1) {?> 어쩌구 저쩌구 <? } ?>";?>
하면 php 스크립트까지 만들어집니다

회원부분과 비회원부분을 따로 캐쉬하는 방법도 있습니다.
<?
if($member[level]>7) {
$inc="/home/http/htdocs/neofinetia/layout/hit/out_member.html";
$script="/layout/today_out_member.php" ;
} else {
$inc="/home/http/htdocs/neofinetia/layout/hit/member.html";
$script="/layout/today_in_member.php" ;
}
@make_cache($inc,$script,60);
?>

출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=58151&page=1