Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: КЭШ - нужно разбить на функции

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: HELP
maragon
Отправлено: 04 Ноября, 2012 - 01:26:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Писал КЭШ систему под сайтик свой..
Но - неудобно, кто может растолковать - как разбить его на функции:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1 - start()
  2. 2 - read()
  3. 3 - delete() //Если надо удалить старый
  4. 4 - end()

Хм

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. #CONTENT#
  3. ob_start();
  4. echo "text";
  5. $content = ob_get_contents(); ob_end_clean();
  6. #CONTENT#
  7. $dir = $_SERVER['DOCUMENT_ROOT']."/temp/";
  8. $uri = (($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'/')."news";
  9. $htmlfilename  = md5($uri).".htm";
  10. $cachelife = time() - 3600 * 24; // кэш время
  11. if(file_exists($dir.$htmlfilename)){
  12. $filemtime =  filemtime($dir.$htmlfilename); // время создания файла
  13. //echo "Кэша время&nbsp;&nbsp; ".$cachelife." <br>Файл создан ".$filemtime."<br>";
  14. if($filemtime <= $cachelife ){
  15. //делаем новый кэш
  16. unlink($dir.$htmlfilename);
  17. file_put_contents($dir.$htmlfilename, $content );
  18. }  
  19. //Если кэш есть - выводим
  20. require($dir.$htmlfilename);
  21. } else {
  22. //Если кэша нету - создаем
  23. file_put_contents($dir.$htmlfilename, $content );
  24. }
  25.  

(Отредактировано автором: 04 Ноября, 2012 - 02:52:20)



-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
DlTA
Отправлено: 04 Ноября, 2012 - 12:02:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




используйте для вывода на форум теги php. читать легче

по теме, вот вот это вот
maragon пишет:
$htmlfilename  = md5($uri).".htm";
$cachelife = time() - 3600 * 24; // кэш время
if(file_exists($dir.$htmlfilename)){
$filemtime =  filemtime($dir.$htmlfilename); // время создания файла
//echo "Кэша время&nbsp;&nbsp; ".$cachelife." <br>Файл создан ".$filemtime."<br>";
if($filemtime <= $cachelife ){
//делаем новый кэш
unlink($dir.$htmlfilename);
file_put_contents($dir.$htmlfilename, $content );
}

надо вынести в отдельную функцию/класс, лучше всеже в класс, ибо у вас есть инициализация с установкой папки с файлами кеша
ну а дальше методы для задания кеша,
какой нить setCash($nameCash, $data, $time)
и getCash($nameCash, ...)
ну и какие там еще нужны методы

(Отредактировано автором: 04 Ноября, 2012 - 12:06:17)

 
 Top
maragon
Отправлено: 05 Ноября, 2012 - 21:43:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Кто может полностью перебить.. а то как бы я не вертел - не то. Огорчение


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
maragon
Отправлено: 07 Ноября, 2012 - 03:09:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. function start(){
  3. $dir = $_SERVER['DOCUMENT_ROOT']."/temp/";
  4. $uri = (($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'/')."";
  5. $htmlfilename  = $name.md5($uri).".htm";
  6. $cachelife = time() - $time;
  7. read($htmlfilename,$dir,$cachelife);
  8. }
  9.  
  10. function read($htmlfilename,$dir,$cachelife){
  11. if(file_exists($dir.$htmlfilename)){
  12. require($dir.$htmlfilename);
  13. } else {
  14. $filemtime =  filemtime($dir.$htmlfilename);  
  15. if($filemtime <= $cachelife ){
  16. create_end($dir,$htmlfilename);
  17. }
  18. }
  19.  
  20. function create_end (){
  21. unlink($dir.$htmlfilename);
  22. file_put_contents($dir.$htmlfilename, $content );
  23. $content = ob_get_contents(); ob_end_clean();
  24. file_put_contents($dir.$htmlfilename, $content );
  25. }
  26. }
  27.  

Все никак разобраться не могу.. Хм


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Zuldek
Отправлено: 07 Ноября, 2012 - 10:02:21
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. class Cache {
  4.  
  5.  protected $content;
  6.  protected $startCache;
  7.  
  8.  public function __construct($cache_dir = ".") {
  9.    $this->cache_dir = $cache_dir;
  10.    $this->content = NULL;
  11.  }
  12.  
  13.  public function getCacheDir() {
  14.    return $this->cache_dir;
  15.  }
  16.  
  17.  public function needCache($cachefile = "", $time = -1, $vars = array()) {
  18.    $this->time = $time;
  19.    $this->file = $cachefile;
  20.    foreach ((array) $vars as $k => $v) {
  21.      $this->file .= "#" . $k . "_" . $v;
  22.    }
  23.  
  24.    $this->file = $this->cache_dir . "/" . addslashes($this->file) . ".cache.php";
  25.    if (is_file($this->file)) {
  26.      $this->cachetime = @filemtime($this->file);
  27.    }
  28.    else {
  29.      $this->startCache = true;
  30.      ob_start();
  31.      return true;
  32.    }
  33.  
  34.    if (!is_file($this->file) || ($this->cachetime + ((int) $this->time * 60) < time() && $this->time >= 0)) {
  35.      $this->startCache = true;
  36.      ob_start();
  37.      return true;
  38.    }
  39.    return false;
  40.  }
  41.  
  42.  public function needCacheObject($cachefile = "", $time = -1, $vars = array()) {
  43.    $this->time = $time;
  44.    $this->file = $cachefile;
  45.    foreach ((array) $vars as $k => $v) {
  46.      $this->file .= "#" . $k . "_" . $v;
  47.    }
  48.    $this->file = $this->cache_dir . "/" . addslashes($this->file) . ".cache.php";
  49.    if (is_file($this->file)) {
  50.      $this->cachetime = @filemtime($this->file);
  51.    }
  52.    else {
  53.      $this->startCache = true;
  54.      return true;
  55.    }
  56.    if (!is_file($this->file) || ($this->cachetime + ((int) $this->time * 60) < time() && $this->time >= 0)) {
  57.      $this->startCache = true;
  58.      return true;
  59.    }
  60.    return false;
  61.  }
  62.  
  63.  public function getCacheObject($object) {
  64.    if ($this->startCache) {
  65.      $tmp = '<?php' . "\n\t" . '$' . $object . "=" . var_export($GLOBALS[$object], true) . "\n" . '?>';
  66.       $this->content = $tmp;
  67.       $this->saveCache();
  68.       $this->startCache = false;
  69.     }
  70.     else {
  71.       @include $this->file;
  72.       $GLOBALS[$object] = $$object;
  73.     }
  74.     return $GLOBALS[$object];
  75.   }
  76.  
  77.   public function getCache() {
  78.     if ($this->startCache) {
  79.       $this->content = ob_get_contents();
  80.       ob_end_clean();
  81.       $this->saveCache();
  82.       $this->startCache = false;
  83.     }
  84.     else {
  85.       $this->loadCache();
  86.     }
  87.     print $this->content;
  88.   }
  89.  
  90.   protected function loadCache() {
  91.     $f = @fopen($this->file, "r");
  92.     $this->content = file_get_contents($this->file);
  93.     @fclose($f);
  94.   }
  95.  
  96.   protected function saveCache() {
  97.     $f = @fopen($this->file, "w");
  98.     @fwrite($f, $this->content);
  99.     @fclose($f);
  100.   }
  101.  
  102. }
  103. ?>
  104.  


Использование:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. Registry::setObject('cache', new Cache($cfg['CACHE']['dir']));
  4. $cache = new Cache($cfg['CACHE']['dir']);
  5.  
  6. if (Registry::getObject('cache')->needCacheObject('rubrics', 0*3600*0)) {
  7.  
  8.  if($curl = curl_init()) {
  9.    curl_setopt($curl, CURLOPT_URL, 'http://catalog.api.2gis.ru/rubricator?where=Саратов&output=jsonp&show_children=1&version=1.3&key=mysecretapikey&callback=dgCallback');
  10.    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
  11.    $rubrics = json_decode(substr(curl_exec($curl),11,-1), true);
  12.    curl_close($curl);
  13.  }
  14.   else echo "nocurl";
  15. }
  16. Registry::getObject('cache')->getCacheObject('rubrics');
  17. ?>

Регистр Registry можете исключить. Использован для удобства работы с многими вещами разом... .
Главное, что после вызова getCacheObject('rubrics');
Получаем объект $rubrics, хранящийся в /cache/rubrics.cache.php
Методы все понятно что делают.
При создании кэша, объект сохраняется в файл "имя параметра вызова метода+.cache.php
в папку cache.
В указанном примере использования забираю рубрики каталога фирм города через с api 2gis.

Заметил сейчас что

забыл удалить.
Иногда возвращатсья к старому коду все же полезно Улыбка

(Отредактировано автором: 07 Ноября, 2012 - 10:08:19)

 
 Top
maragon
Отправлено: 08 Ноября, 2012 - 17:18:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Ругается он..
Fatal error: Class 'Registry'
Как исключить?


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB