>백엔드 개발 >PHP 튜토리얼 >또 다른 캐시 클래스

또 다른 캐시 클래스

WBOY
WBOY원래의
2016-07-25 09:11:15968검색
캐시 클래스
  1. /*
  2. * 캐시 클래스 캐시
  3. * 작성자: Duo Noob
  4. * 작성 시간: 2006-05-05
  5. * 예:
  6. include( "cache.php" );
  7. $cache = new 캐시(30);
  8. $cache->cacheCheck();
  9. echo date("Y-m-d H: i:s");
  10. $cache->caching();
  11. */
  12. 클래스 캐시 {
  13. //캐시 디렉터리
  14. var $cacheRoot = "./cache/";
  15. //캐시 업데이트 시간(초), 0은 캐싱이 없음을 의미합니다.
  16. var $cacheLimitTime = 0;
  17. //캐시 파일 이름
  18. var $cacheFileName = "";
  19. //캐시 확장자
  20. var $cacheFileExt = "php";
  21. /*
  22. * 생성자
  23. * int $cacheLimitTime 캐시 업데이트 시간
  24. */
  25. function 캐시( $cacheLimitTime ) {
  26. if( intval( $cacheLimitTime ) )
  27. $this->cacheLimitTime = $cacheLimitTime;
  28. $this->cacheFileName = $this->getCacheFileName();
  29. ob_start();
  30. }
  31. /*
  32. * 캐시된 파일이 설정된 업데이트 시간 이내인지 확인
  33. * 반환: 업데이트 시간 이내이면 파일 내용을 반환하고, 그렇지 않으면 실패 반환
  34. */
  35. 함수 캐시체크(){
  36. if( file_exists( $this->cacheFileName ) ) {
  37. $cTime = $this->getFileCreateTime( $this->cacheFileName );
  38. if( $cTime $this ->cacheLimitTime > time() ) {
  39. echo file_get_contents( $this->cacheFileName );
  40. ob_end_flush();
  41. exit;
  42. }
  43. }
  44. return false ;
  45. }
  46. /*
  47. * 캐시 파일 또는 정적 출력
  48. * 문자열 $staticFileName 정적 파일 이름(상대 경로 포함)
  49. */
  50. 함수 캐싱( $staticFileName = "" ){
  51. if( $this->cacheFileName ) {
  52. $cacheContent = ob_get_contents();
  53. //echo $cacheContent;
  54. ob_end_flush();
  55. if( $ staticFileName ) {
  56. $this->saveFile( $staticFileName, $cacheContent );
  57. }
  58. if( $this->cacheLimitTime )
  59. $this->saveFile( $ this->cacheFileName, $cacheContent );
  60. }
  61. }
  62. /*
  63. * 캐시 파일 지우기
  64. * string $fileName은 파일 이름(함수 포함) 또는 전체(모두)를 지정합니다.
  65. * 반환: 삭제에 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  66. */
  67. functionclearCache( $fileName = "all" ) {
  68. if( $fileName != "all" ) {
  69. $ fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;
  70. if( file_exists( $fileName ) ) {
  71. return @unlink ( $fileName );
  72. }else return false;
  73. }
  74. if ( is_dir( $this->cacheRoot ) ) {
  75. if ( $dir = @opendir( $this->cacheRoot ) ) {
  76. while ( $file = @readdir( $dir ) ) {
  77. $check = is_dir( $file );
  78. if ( !$check )
  79. @unlink( $this-> ;cacheRoot . $file );
  80. }
  81. @closedir( $dir );
  82. true 반환;
  83. }else{
  84. false 반환;
  85. }
  86. }else{
  87. return false;
  88. }
  89. }
  90. /*
  91. * 현재 동적 파일을 기반으로 캐시 파일 이름 생성
  92. */
  93. function getCacheFileName() {
  94. return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;
  95. }
  96. /*
  97. * 캐시 파일 생성 시간
  98. * 문자열 $fileName 캐시 파일 이름(상대 경로 포함)
  99. * 반환: 파일 생성 시간(초), 파일이 없으면 0을 반환합니다.
  100. */
  101. function getFileCreateTime( $fileName ) {
  102. if( !trimm($fileName ) ) return 0;
  103. if( file_exists( $fileName ) ) {
  104. return intval(filemtime( $fileName ));
  105. }else return 0 ;
  106. }
  107. /*
  108. * 파일 저장
  109. * string $fileName 파일 이름(상대 경로 포함)
  110. * string $text 파일 콘텐츠
  111. * 반환: 성공 시 true, 실패 시 false
  112. */
  113. function saveFile($fileName, $text) {
  114. if( ! $fileName || ! $text ) return false;
  115. if( $this-> ;makeDir( dirname( $fileName ) ) ) {
  116. if( $fp = fopen( $fileName, "w" ) ) {
  117. if( @fwrite( $fp, $text ) ) {
  118. fclose ($fp);
  119. true 반환
  120. }else {
  121. fclose($fp);
  122. false 반환;
  123. }
  124. }
  125. }
  126. false 반환;
  127. }
  128. /*
  129. * 지속적으로 디렉터리 생성
  130. * string $dir 디렉터리 문자열
  131. * int $mode 권한 번호
  132. * 반환: 성공적으로 생성되었거나 모두 생성된 경우 true, 그렇지 않으면 false
  133. */
  134. function makeDir( $dir, $mode = "0777" ) {
  135. if( ! $dir ) return 0;
  136. $dir = str_replace( "\", "/ ", $dir );
  137. $mdir = "";
  138. foreach(explore( "/", $dir ) as $val ) {
  139. $mdir .= $val."/" ;
  140. if( $val = = ".." || $val == "." || Trim( $val ) == "" ) 계속;
  141. if( !file_exists( $mdir ) ) {
  142. if(! @mkdir( $mdir, $mode )){
  143. return false;
  144. }
  145. }
  146. }
  147. return true;
  148. }
  149. }
  150. ?>
코드 복사


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.