PHPページキャッシュクラス

WBOY
リリース: 2016-07-25 09:10:33
オリジナル
1078 人が閲覧しました
  1. /* $cache = new Cache("../cache/",20); // コンストラクター、キャッシュ クラス オブジェクトを作成します

  2. $cache->PutCache ( ); // キャッシュを注ぎ出す
  3. */
  4. class Cache
  5. {
  6. private $CacheDir = 'Cache'; /* キャッシュのディレクトリ*/
  7. private $SetTimeOut = 10; /* キャッシュの有効期限*/
  8. private $SetExt = ' .cache'; /* キャッシュ ファイルのサフィックス名*/
  9. private $CacheFileUrl = ''; /* キャッシュ ファイルのアドレス*/
  10. $CacheConfigFile = ''; /* キャッシュ ファイルの構成情報*/

    public $LastUnixTimePoke = 0; /* 最後にキャッシュされた Unix タイムスタンプ */

  11. public $CurrentUnixTimePoke = 0;/* 現在キャッシュされた Unix タイムスタンプ */
  12. public $NextUnixTimePoke = 0; /* 次回キャッシュされた Unix タイムスタンプ */
  13. public $UnixNowToNext = 0; /* 現在のキャッシュと次のキャッシュの Unix タイムスタンプの差*/

  14. public $LastTimePoke = 0; /* 最後にキャッシュされた時刻*/

  15. public $CurrentTimePoke = 0;/*現在のキャッシュ時間*/
  16. public $NextTimePoke = 0; /* 次回のキャッシュ時間*/

  17. public $DataLength = 0; /* キャッシュ領域の内容の長さ*/

  18. $CacheToPage = '' ; /* キャッシュ ファイルの内容*/
  19. private $SplitTeam = false; /* キャッシュ ファイルをグループに保存するかどうか*/

  20. public $Cache = false;ユーザーは外部で判断可能*/

  21. private $_IsCache = false; /* キャッシュが可能かどうか*/

  22. public function Cache($SetTimeOut = 20,$ CacheDir = 'キャッシュ',$SplitTeam = false,$SetExt = '.cache')

  23. {
  24. $this->CacheDir = $CacheDir;
  25. $this->SplitTeam = $SplitTeam;
  26. if(!is_numeric($ SetTimeOut))
  27. {
  28. $this->ErrResponse('キャッシュ有効期限の設定が無効です');
  29. return false;
  30. } else {
  31. $this->SetTimeOut = $SetTimeOut
  32. }
  33. $this-> ;SetExt = $SetExt;

  34. /* キャッシュ開始*/

  35. ob_clean();
  36. ob_start();
  37. ob_implicit_flush(0);
  38. $this-> ;CreateCache();
  39. return true;
  40. }

  41. プライベート関数 CreateCache()

  42. {
  43. $_CacheFile = str_replace('.','_',basename($_SERVER['PHP_SELF' ])) '_' .
  44. md5(basename($_SERVER['PHP_SELF'])) . $this->SetExt;
  45. $_CacheConfig = str_replace('.','_',basename($_SERVER['PHP_SELF'])) ' _' . '.cof';

  46. if(!file_exists($this->CacheDir))

  47. {
  48. mkdir($this->CacheDir, 0777);
  49. }< /p>
  50. if($this->SplitTeam)

  51. {
  52. $_CacheConfigDir = $this->CacheDir .str_replace('.','_',basename($ _SERVER['PHP_SELF']) ) . '_/';
  53. if(!file_exists($_CacheConfigDir))
  54. {
  55. mkdir($_CacheConfigDir,0777);
  56. }
  57. $_CacheUrl = $this->CacheDir . $_CacheFile;
  58. $_CacheConfigUrl = $this->CacheDir . $_CacheConfig;
  59. } else {
  60. $_CacheUrl = $this->$_CacheConfig;
  61. }

  62. if(! _CacheUrl))

  63. {
  64. $hanld = @fopen($_CacheUrl,"w");
  65. @fclose($hanld);
  66. }

  67. if(!file_exists($_CacheConfigUrl))

  68. {
  69. $hanld = @fopen($_CacheConfigUrl,"w");
  70. @fclose($hanld);
  71. }
  72. $this->CacheConfigFile = $_CacheConfigUrl;

  73. $this- >CacheFileUrl = $_CacheUrl;
  74. $this->CheckCache();
  75. return true;
  76. }

  77. プライベート関数 CheckCache()

  78. {
  79. $_FileEditTime = @filemtime($this->CacheFileUrl);
  80. $_TimeOut = $this->SetTimeOut;
  81. $_IsTimeOut = $_FileEditTime $ _TimeOut;

  82. $this->LastUnixTimePoke = $_FileEditTime;

  83. $this->NextUnixTimePoke = $_IsTimeOut;
  84. $this->CurrentUnixTimePoke = time();
  85. $this-> ;UnixNowToNext = $this->NextUnixTimePoke - time();

  86. $this->LastTimePoke = date("Y-m-d H:i:s",$_FileEditTime);

  87. $this- >次回のポケ = date("Y-m-d H:i:s",$_IsTimeOut);
  88. $this->CurrentTimePoke = date("Y-m-d H:i:s",time());

  89. < ;p>$_TxtInformation = "最後のキャッシュのタイムスタンプ: $this->LastUnixTimePoke ";
  90. $_TxtInformation .= "現在のキャッシュのタイムスタンプ: $this->CurrentUnixTimePoke ";
  91. $_TxtInformation .= "次のキャッシュ時刻 Poke: $this ->NextUnixTimePoke ";

  92. $_TxtInformation .= "最終キャッシュ時刻: $this->LastTimePoke ";

  93. $_TxtInformation .= "現在のキャッシュ時刻: $this ->CurrentTimePoke " ;
  94. $_TxtInformation .= "次のキャッシュ時間: $this->NextTimePoke ";

  95. $_TxtInformation .= "次のキャッシュ スタンプ: $this-> ;UnixNowToNext ";

  96. $handl = @fopen($this->CacheConfigFile,'w');

  97. if($handl)
  98. {
  99. @fwrite($handl,$_TxtInformation) ;
  100. @fclose($handl) ;
  101. }

  102. if($_IsTimeOut >= time())

  103. {
  104. $this->GetCacheData();
  105. }
  106. }< /p>
  107. プライベート関数 ClearCacheFile()

  108. {
  109. @unlink($this->gt;CacheFileUrl);
  110. @unlink($this->gt;CacheConfigFile);
  111. }

  112. {
  113. $this->DataLength = ob_get_length();
  114. $PutData = ob_get_contents();
  115. if(!file_exists($this->CacheFileUrl))
  116. {
  117. $CreateOK = $this ->CreateCache();
  118. if(!$CreateOK)
  119. {
  120. $this->ErrResponse('キャッシュ ファイルのチェック中にエラーが発生し、キャッシュ ファイルの作成に失敗しました');
  121. return false;
  122. }
  123. } else {
  124. $hanld = @fopen ($this->CacheFileUrl,"w");
  125. if($hanld)
  126. {

  127. if(@is_writable($this->CacheFileUrl))

  128. {
  129. @flock( $hanld, LOCK_EX);
  130. $_PutData = @fwrite($hanld,$PutData);
  131. @flock($hanld, LOCK_UN);
  132. if(!$_PutData)
  133. {
  134. $this-> 変更できません現在のキャッシュ ファイルの内容');
  135. return false;
  136. } else {
  137. @fclose($hanld);
  138. return true;
  139. }
  140. } else {
  141. $this->ErrResponse('キャッシュされたファイルはwrite');
  142. return false;
  143. }
  144. } else {

  145. $this->ErrResponse('キャッシュ ファイルを開くときに致命的なエラーが発生しました');

  146. return false;
  147. }
  148. }
  149. }

  150. パブリック関数 GetCacheData()

  151. {
  152. $hanld = @fopen($this->CacheFileUrl,"r");
  153. if($hanld)
  154. {
  155. if (@is_readable ($this->CacheFileUrl))
  156. {
  157. $this->CacheToPage = @file_get_contents($this->CacheFileUrl);
  158. $IsEmpty = count(file($this->CacheFileUrl)); //キャッシュファイルが空か判定

  159. if($IsEmpty> 0)

  160. {
  161. echo $this->CacheToPage;
  162. @fclose($hanld);
  163. ob_end_flush();
  164. exit( );
  165. }
  166. } else {
  167. $this->ErrResponse('キャッシュ ファイルの内容の読み取りに失敗しました');
  168. return false;
  169. }
  170. } else {
  171. $this->ErrResponse('キャッシュ ファイルの内容の読み取りに失敗しましたキャッシュ ファイルを開く' );
  172. return false;
  173. }
  174. }

  175. プライベート関数 ErrResponse($Msg)

  176. {
  177. echo $Msg;
  178. }
  179. }
  180. ?>
コードをコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート