File.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <?php
  2. namespace ZN\Caching\Drivers;
  3. use ZN\Caching\CacheInterface;
  4. class FileDriver implements CacheInterface
  5. {
  6. //----------------------------------------------------------------------------------------------------
  7. //
  8. // Yazar : Ozan UYKUN <ozanbote@windowslive.com> | <ozanbote@gmail.com>
  9. // Site : www.zntr.net
  10. // Lisans : The MIT License
  11. // Telif Hakkı: Copyright (c) 2012-2016, zntr.net
  12. //
  13. //----------------------------------------------------------------------------------------------------
  14. /* Path Değişkeni
  15. *
  16. * Ön bellekleme dizin bilgisini
  17. * tutması için oluşturulmuştur.
  18. *
  19. */
  20. protected $path;
  21. /******************************************************************************************
  22. * CONSTRUCT YAPICISI *
  23. ******************************************************************************************/
  24. public function __construct()
  25. {
  26. $this->path = STORAGE_DIR.'Cache/';
  27. if( ! is_dir($this->path) )
  28. {
  29. \Folder::create($this->path, 0755);
  30. }
  31. }
  32. /******************************************************************************************
  33. * SELECT *
  34. *******************************************************************************************
  35. | Genel Kullanım: Önbelleğe alınmış nesneyi çağırmak için kullanılır. |
  36. | |
  37. | Parametreler: Tek parametresi vardır. |
  38. | 1. string var @key => Nesne anahtarı. |
  39. | |
  40. | Örnek Kullanım: ->get('nesne'); |
  41. | |
  42. ******************************************************************************************/
  43. public function select($key = '')
  44. {
  45. $data = $this->_select($key);
  46. return ( is_array($data) )
  47. ? $data['data']
  48. : false;
  49. }
  50. /******************************************************************************************
  51. * INSERT *
  52. *******************************************************************************************
  53. | Genel Kullanım: Ön bellekte değişken saklamak için kullanılır. |
  54. | |
  55. | Parametreler: 4 parametresi vardır. |
  56. | 1. string var @key => Nesne anahtarı. |
  57. | 2. variable var @var => Nesne. |
  58. | 3. numeric var @time => Saklanacağı zaman. |
  59. | 4. mixed var @compressed => Sıkıştırma. |
  60. | |
  61. | Örnek Kullanım: ->get('nesne'); |
  62. | |
  63. ******************************************************************************************/
  64. public function insert($key = '', $var = '', $time = 60, $compressed = false)
  65. {
  66. $datas = array
  67. (
  68. 'time' => time(),
  69. 'ttl' => $time,
  70. 'data' => $var
  71. );
  72. if( \File::write($this->path.$key, serialize($datas)) )
  73. {
  74. \File::permission($this->path.$key, 0640);
  75. return true;
  76. }
  77. return false;
  78. }
  79. /******************************************************************************************
  80. * DELETE *
  81. *******************************************************************************************
  82. | Genel Kullanım: Ön bellekten nesneyi silmek için kullanılır. |
  83. | |
  84. | Parametreler: Tek parametresi vardır. |
  85. | 1. string var @key => Nesne anahtarı. |
  86. | |
  87. | Örnek Kullanım: ->delete('nesne'); |
  88. | |
  89. ******************************************************************************************/
  90. public function delete($key = '')
  91. {
  92. return \File::delete($this->path.$key);
  93. }
  94. /******************************************************************************************
  95. * INCREMENT *
  96. *******************************************************************************************
  97. | Genel Kullanım: Nesnenin değerini artımak için kullanılır. |
  98. | |
  99. | Parametreler: 2 parametresi vardır. |
  100. | 1. string var @key => Nesne anahtarı. |
  101. | 2. numeric var @increment => Artırım miktarı. |
  102. | |
  103. | Örnek Kullanım: ->increment('nesne', 1); |
  104. | |
  105. ******************************************************************************************/
  106. public function increment($key = '', $increment = 1)
  107. {
  108. $data = $this->_select($key);
  109. if( $data === false )
  110. {
  111. $data = ['data' => 0, 'ttl' => 60];
  112. }
  113. elseif( ! is_numeric($data['data']) )
  114. {
  115. return false;
  116. }
  117. $newValue = $data['data'] + $increment;
  118. return ( $this->insert($key, $newValue, $data['ttl']) )
  119. ? $newValue
  120. : false;
  121. }
  122. /******************************************************************************************
  123. * DECREMENT *
  124. *******************************************************************************************
  125. | Genel Kullanım: Nesnenin değerini azaltmak için kullanılır. |
  126. | |
  127. | Parametreler: 2 parametresi vardır. |
  128. | 1. string var @key => Nesne anahtarı. |
  129. | 2. numeric var @decrement => Azaltım miktarı. |
  130. | |
  131. | Örnek Kullanım: ->decrement('nesne', 1); |
  132. | |
  133. ******************************************************************************************/
  134. public function decrement($key = '', $decrement = 1)
  135. {
  136. $data = $this->_select($key);
  137. if( $data === false )
  138. {
  139. $data = ['data' => 0, 'ttl' => 60];
  140. }
  141. elseif( ! is_numeric($data['data']) )
  142. {
  143. return false;
  144. }
  145. $newValue = $data['data'] - $decrement;
  146. return $this->insert($key, $newValue, $data['ttl'])
  147. ? $newValue
  148. : false;
  149. }
  150. /******************************************************************************************
  151. * CLEAN *
  152. *******************************************************************************************
  153. | Genel Kullanım: Tüm önbelleği silmek için kullanılır. |
  154. | |
  155. ******************************************************************************************/
  156. public function clean()
  157. {
  158. return \Folder::delete($this->path);
  159. }
  160. /******************************************************************************************
  161. * INFO *
  162. *******************************************************************************************
  163. | Genel Kullanım: Ön bellekleme hakkında bilgi edinmek için kullanılır. |
  164. | |
  165. | Parametreler: Tek parametresi vardır. |
  166. | 1. string var @type => Bilgi alınacak kullanıcı türü. |
  167. | |
  168. | Örnek Kullanım: ->info('user'); |
  169. | |
  170. ******************************************************************************************/
  171. public function info($type = NULL)
  172. {
  173. return \Folder::fileInfo($this->path);
  174. }
  175. /******************************************************************************************
  176. * GET METADATA *
  177. *******************************************************************************************
  178. | Genel Kullanım: Ön bellekteki nesne hakkında bilgi almak için kullanılır. |
  179. | |
  180. | Parametreler: Tek parametresi vardır. |
  181. | 1. string var @key => Bilgi alınacak nesne. |
  182. | |
  183. | Örnek Kullanım: ->get_metadata('nesne'); |
  184. | |
  185. ******************************************************************************************/
  186. public function getMetaData($key = '')
  187. {
  188. if( ! file_exists($this->path.$key) )
  189. {
  190. return false;
  191. }
  192. $data = unserialize(\File::read($this->path.$key));
  193. if( is_array($data) )
  194. {
  195. $mtime = filemtime($this->path.$key);
  196. if( ! isset($data['ttl']) )
  197. {
  198. return false;
  199. }
  200. return array
  201. (
  202. 'expire' => $mtime + $data['ttl'],
  203. 'mtime' => $mtime
  204. );
  205. }
  206. return false;
  207. }
  208. /******************************************************************************************
  209. * IS SUPPORTED *
  210. *******************************************************************************************
  211. | Genel Kullanım: Sürücünün desteklenip desklenmediğini öğrenmek için kullanılır. |
  212. | |
  213. ******************************************************************************************/
  214. public function isSupported()
  215. {
  216. return is_writable($this->path);
  217. }
  218. /******************************************************************************************
  219. * PROTECTED SELECT *
  220. ******************************************************************************************/
  221. protected function _select($key)
  222. {
  223. if( ! file_exists($this->path.$key) )
  224. {
  225. return false;
  226. }
  227. $data = unserialize(\File::read($this->path.$key));
  228. if( $data['ttl'] > 0 && time() > $data['time'] + $data['ttl'] )
  229. {
  230. \File::delete($this->path.$key);
  231. return false;
  232. }
  233. return $data;
  234. }
  235. }