author : 유창화 (yoo chang hwa)
version : 1.0.2
regist : 2012-12-30
modify : 2013-01-01
comment : PHP 확장 라이브러리, PHP5 이상, UTF-8 전용
lisence : 상업적, 비상업적 사용 제한 없음, 배포, 수정 제한 없음, 단, 교육(강좌), 출판에는 동의 없이 사용할수 없음
db schema
//캐쉬
CREATE TABLE IF NOT EXISTS `ex_cache` (
`cache_subject` varchar(50) NOT NULL,
`cache_position` varchar(30) NOT NULL,
`cache_seriaize` longtext NOT NULL,
`cache_time` int(11) NOT NULL,
PRIMARY KEY (`cache_subject`,`cache_position`),
KEY `cache_position` (`cache_position`),
KEY `cache_time` (`cache_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
### 설치 방법 ###
압축을 풀어서 ftp로 올립니다.
기존에 동일한 디렉토리, 파일이 있다면 덮어 씌웁니다.
디비에 아래 테이블을 추가합니다.
CREATE TABLE IF NOT EXISTS `ex_cache` (
`cache_subject` varchar(50) NOT NULL,
`cache_position` varchar(30) NOT NULL,
`cache_seriaize` longtext NOT NULL,
`cache_time` int(11) NOT NULL,
PRIMARY KEY (`cache_subject`,`cache_position`),
KEY `cache_position` (`cache_position`),
KEY `cache_time` (`cache_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
기존에 있다면, 그대로 놔두면 됩니다.
### 적용방법 ###
같이 첨부된 sample.php 를 참고 하시면 됩니다.
version : 1.0.2
regist : 2012-12-30
modify : 2013-01-01
comment : PHP 확장 라이브러리, PHP5 이상, UTF-8 전용
lisence : 상업적, 비상업적 사용 제한 없음, 배포, 수정 제한 없음, 단, 교육(강좌), 출판에는 동의 없이 사용할수 없음
db schema
//캐쉬
CREATE TABLE IF NOT EXISTS `ex_cache` (
`cache_subject` varchar(50) NOT NULL,
`cache_position` varchar(30) NOT NULL,
`cache_seriaize` longtext NOT NULL,
`cache_time` int(11) NOT NULL,
PRIMARY KEY (`cache_subject`,`cache_position`),
KEY `cache_position` (`cache_position`),
KEY `cache_time` (`cache_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
### 설치 방법 ###
압축을 풀어서 ftp로 올립니다.
기존에 동일한 디렉토리, 파일이 있다면 덮어 씌웁니다.
디비에 아래 테이블을 추가합니다.
CREATE TABLE IF NOT EXISTS `ex_cache` (
`cache_subject` varchar(50) NOT NULL,
`cache_position` varchar(30) NOT NULL,
`cache_seriaize` longtext NOT NULL,
`cache_time` int(11) NOT NULL,
PRIMARY KEY (`cache_subject`,`cache_position`),
KEY `cache_position` (`cache_position`),
KEY `cache_time` (`cache_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
기존에 있다면, 그대로 놔두면 됩니다.
### 적용방법 ###
같이 첨부된 sample.php 를 참고 하시면 됩니다.
첨부파일
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 30개
여러 기준별 인기글과 통합형 인기글을 한꺼번에 처리 가능합니다.
캐쉬는 1개만 사용 됩니다.
통합형 인기글 정렬 순서는 'good, down, scrap, comment' 와 같이
순서를 정해주시면 됩니다.
높은 점수로 처줄 항목을 앞쪽에 배치하시면 됩니다.
당분간 바쁜 일로 올리지 못할것 같고
추후 다른 예제로 다시 찾아뵙도록 하겠습니다.
캐쉬를 한페이지내에 아래와 같이
_EX::save_cache('s1', 'main', $cache_data1);
_EX::save_cache('s2', 'main', $cache_data2);
_EX::save_cache('s3', 'main', $cache_data3);
_EX::save_cache('s4', 'main', $cache_data4);
_EX::save_cache('s5', 'main', $cache_data5);
만들었다면
캐시를 불러올때 개별적으로 불러오면 모두 내부적으로 5번의 쿼리를 날리게 됩니다.
$cache_data1 = _EX::get_cache(600, 's1', 'main');
$cache_data2 = _EX::get_cache(600, 's2', 'main');
$cache_data3 = _EX::get_cache(600, 's3', 'main');
$cache_data4 = _EX::get_cache(600, 's4', 'main');
$cache_data5 = _EX::get_cache(600, 's5', 'main');
그러나.....
$cache = _EX::get_cache(600, '', 'main');
와 같이 사용한다면, 한번의 쿼리로 5개의 캐쉬 데이타를 모두 가져옵니다.
스킨공개 감사드립니다. 서서서서서선추!!!
두가지 여쭤 봐도 될까요!
$cache_subject는 어떤 의미인지 알겠습니다. 그런데
$cahe_position 은 어떤 의미 인가요? 예제나 댓글에 보면, 'all', 'main' 이라고 되어있는데,
이것은 어떤 포지션을 나타내는 것인가요?
또, html을 출력된 부분을 캐쉬에 담는 방법의 예제하나만 들어주시면 안될까요?
ob_start();
.....
$contents = ob_get_contents();
ob_end_clean();
_EX::save_cache('home', 'left', $contents);
이렇게 하면 될까요
$cache_subject 는 이 캐쉬는 어떤 캐쉬를 의미하는가를 나타냅니다.
쓰기 나름이지만 hot_post10, new_post10 ..... 이런식으로요.
$cahe_position 는 어느 페이지에서 사용되는지 구분 하기 위한 것입니다.
보통 보면 인기글 같은 경우는 왼쪽이나 오른쪽에 딸려서 모든 페이지에서
나오기 마련인데 그런경우 'all' 과 같이 설정해놓으면
$cache = $cache = get_cache(600, '', 'all');
과 같은 방법으로
캐쉬를 가져올때 'all' 로 설정된 캐쉬를 한방에 모두 가져올수 있습니다.
특정 캐쉬들은 메인에서만 사용 된다면, $cahe_position 을 'main' 으로 다 생성하고
불러올때는 'main' 으로만 불러와서 배열형태로 한번에 사용할수 있습니다.
캐쉬의 목적은 여러가지가 있겟지만
가장 부하의 원인이 되는 많은 쿼리수를 줄이는 것과 처리과정을 생략하는데에 제일 큰 목적이 있습니다.
따라서 캐쉬를 가져올때도 많은 쿼리를 사용한다면 원래 목적에 위배되겟지요.
한마디로 다시 정의 하자면
$cahe_position 을 쓰는 목적은 캐쉬를 가져오기 위한 쿼리수를 줄이기 위한 용도입니다. 하나의 페이지에서 쓰여질 캐쉬를 한방에 다 가져오기 위한 것 입니다.
html 문서의 캐쉬 저장도 raineye 님처럼 그렇게 하시면 됩니다.
_EX::save_cache('home', 'left', $contents);
이렇게 저장하였다면
$cache = get_cache(600, 'home', 'left');
$contents = $cache['home']['left'][0];
이렇게 쓰시면 되겠습니다.
[0] 붙는 이유는 저장시 항상 배열로 만들어서 저장하기 때문에
배열이 아닌 경우에는 배열로 변환시 첫번째 데이타로 들어가기 때문입니다.
질문 감사합니다.
$check_time = 600;//600초, 10분
$cache_subject = 'home';
$cache_posion = 'left';
$cache = _EX::get_cache($check_time, $cache_subject, $cache_posion);
if(!is_array($cache[$cache_subject][$cache_posion])) {
ob_start();
.....
$contents = ob_get_contents();
ob_end_clean();
_EX::save_cache($cache_subject, $cache_posion, $contents);
echo $contents;
}
else {
$contents = $cache[$cache_subject][$cache_posion][0];
echo $contents;
}
?>
상세한 답변 너무 감사합니다 밑의 코드 예제도 너무 감사합니다.
저는 오래전에 완전 까막눈일때 부터 PHP를 유창화님께 다 배우는듯하네요~
다시 한번 감사드립니다
공부하기 참 좋은 소스인데.......
많이 안봐서 안타깝습니다.
좋은스킨 올려주셔서 감사합니다 ^^
순서대로 한번 보시면 조금 이해는 되지 않을까 싶습니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_skin&sfl=mb_id,1&stx=dbckdghk
최근 게시물 최신 댓글 부터 보시면 될거 같습니다.
전부 연결된 내용입니다.
이부분에서
Fatal error: Class '_EX' not found i
에러가 나네요 ㅠ