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
Форумы портала PHP.SU :: Версия для печати :: Cache_Lite
Форумы портала PHP.SU » PHP » Программирование на PHP » Cache_Lite

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

1. garvey - 11 Июня, 2010 - 17:59:24 - перейти к сообщению
Сегодня первый раз работал с кэшированием. Скачал PEAR:Cache_Lite.
Алгоритм работы такой:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //класс кэширования
  3. require_once('Cache/Lite.php');
  4. $id = "projects";
  5. $options = array ('cacheDir' => '/cache/', 'lifeTime' => 3600);
  6. $Cache_Lite = new Cache_Lite ($options);
  7. if ($data = $Cache_Lite -> get ($id))
  8. {
  9.         выводим данные из кэша.
  10. }
  11. else
  12. {
  13.         присваиваем данные переменной $date
  14.         $Cache_Lite -> save ($data);   
  15. }
  16.  
  17.  
  18. ?>

Вроде бы всё правильно, но вот проблема.
Я этот класс вставляю в скрипт projects.php, оттуда я отсылаю данные в шаблон Smarty. Т.е. весь контент страницы находится в projects.tpl.

Что присваивать переменной $data? Откуда брать контент?
2. isle - 11 Июня, 2010 - 23:03:09 - перейти к сообщению
Капец, для кеша уже и целые классы пишут, скоро, наверно, CMS запустят Ха-ха

Поначалу вам буфер нужен был, теперь оказалось, что простой кеш на ФТП. А чем вас мой вариант не устроил? Всего несколько строк и наверняка работает куда быстрей, чем сей класс, я уже полгода так кеши пишу - всё отлично работает даже при очень высокой посещалке.
3. garvey - 11 Июня, 2010 - 23:29:54 - перейти к сообщению
При чем здесь ФТП? Обычное кэширование страниц.
4. isle - 11 Июня, 2010 - 23:32:43 - перейти к сообщению
garvey пишет:
При чем здесь ФТП? Обычное кэширование страниц.


Ну как при чем? Кеш можно в БД как временные таблицы создать, можно в ОЗУ как буфер, а можно на ФТП (на винте сервера). А где по вашему кеш должен храниться - где-то там в интернете, что ли? Радость

---
П.С. Страницы обычно не кешируют, кешируют отдельные блоки страницы во временной директории (папке) временного файла, который имеет определенное время жизни. Ну, например, можно на сутки или на час закешировать вывод блока Категорий сайта, чтоб их постоянно из базы не дергать и не обсчитывать логику, не обрабатывать массивы и т.д., а просто выводить готовый блок html, обновляя его раз в сутки, что значительно уменьшает нагрузку на сервер.
5. Joo - 12 Июня, 2010 - 06:38:57 - перейти к сообщению
isle пишет:
теперь оказалось, что простой кеш на ФТП


Мне вот тоже интересно, что значит на ФТП? Вы имеете ввиду, на накопителе сервера, или все таки использую ФТП? Я бы Вам посоветовал выражаться более корректно, тогда как Вы говорите, на ФТП, люди подразумеваю сохранение данных через протокол передачи файлов (ФТП), со всем вытекающим.
6. isle - 12 Июня, 2010 - 06:43:21 - перейти к сообщению
Joo пишет:
Мне вот тоже интересно, что значит на ФТП? Вы имеете ввиду, на накопителе сервера, или все таки использую ФТП? Я бы Вам посоветовал выражаться более корректно, тогда как Вы говорите, на ФТП, люди подразумеваю сохранение данных через протокол передачи файлов (ФТП), со всем вытекающим.


Я же уточнил с примером - "а можно на ФТП (на винте сервера)" Подмигивание

П.С. вы, наверно, уже спите Радость а у нас уже петухи пропели... рассвет... скоро лягу на часок.
7. Joo - 12 Июня, 2010 - 06:50:22 - перейти к сообщению
isle пишет:
а можно на ФТП (на винте сервера)

Звучит, как "А можно на накопителе сервера используя протокол передачи файлов (ФТП), который подразумевает подключение, получение и передачу файлов используя специальный механизм"

Использовать в данном случае аббревиатуру ФТП вообще не уместно, даже с уточнением.

Кстати именно по Вашему получается, что кеш...
isle пишет:
должен храниться - где-то там в интернете

p.s. Прошу прощения за оффтоп
8. garvey - 12 Июня, 2010 - 10:05:42 - перейти к сообщению
Ну что. Разве никто никогда не кэшировал страницы?
9. sergtka4ov - 13 Июня, 2010 - 12:24:40 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Начало кэширования
  4. $start = microtime();
  5. $filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html';
  6. $cached = false;
  7. $time = 4 * 60 * 60; // Время кеша в секундах (4*60*60 = 4 часа)
  8. $stat = 0; // Установите 1 для вывода времени загрузки страницы (по умолчанию 0)
  9.  
  10. if (file_exists($filename)) {
  11. if ((time()-filemtime($filename))<$time) {
  12. $cached = true;
  13. } else {
  14. unlink($filename);
  15. $cached = false;
  16. }
  17. }
  18.  
  19. if ($cached) {
  20. readfile($filename);
  21. } else {
  22. ?>
  23.  
  24.  
  25. Здесь код -к примеру содержимое index.php, в котором через include идёт подключение файлов и сборка главной страницы
  26.  
  27. <?PHP
  28. // Конец кэширования
  29. $text = ob_get_clean();
  30. $fh = fopen($filename, 'w+');
  31. fwrite($fh, $text);
  32. fclose($fh);
  33. echo $text;
  34. }
  35. $finish = microtime();
  36. if ($stat==1) echo $finish-$start;
  37. ?>
  38.  


Перед применением создайте директорию 'cache'
Это самы простой вариант, от него уже можно плясать дальше усложняя и модифицируя
10. JustUserR - 13 Июня, 2010 - 13:29:55 - перейти к сообщению
garvey пишет:
Вроде бы всё правильно, но вот проблема.
Я этот класс вставляю в скрипт projects.php, оттуда я отсылаю данные в шаблон Smarty. Т.е. весь контент страницы находится в projects.tpl.
Что присваивать переменной $data? Откуда брать контент?
Если у вас имеется шаблон страницы в специальном файле с подстановочными тегами - то необходимо считиывать этот файл поблочно в переменную и выполнять соответствующие значения подстановок - после чего все данные выести на экран и одновременно передать в класс кеширования
Можно также воспользоваться буферазицией - только в этом случае нужно разделить PHP-скрипт на отдельные секции вы воводу страницы из кеша и по генерации страницы и сохранению ее в кеш
11. garvey - 13 Июня, 2010 - 16:58:47 - перейти к сообщению
Спасибо вам. Уже что-то получилось. Правда пока без шаблонов. Сейчас буду пробовать поблочно.
12. JustUserR - 14 Июня, 2010 - 12:02:25 - перейти к сообщению
garvey пишет:
Правда пока без шаблонов. Сейчас буду пробовать поблочно
В данном случае все зависит от конкретной структуры шаблона и методов работы с ним - если шаблон представляет собой набор подстановочных тегов или является XML-файлов то в таком случае замена происходит по следующему прниципу - этот файл разбирается поэлементно или поблочно с помощью парсера и в нем производятся соответствующеи замены и подстановки - причем если в шаблоне вызывается какие-то функции из API вашего PHP-скрипта то они только возвращают значения и ничего не выводят - поэтому в результате обработки вы получаете большую строковую переменную предназначающуюся для вывода на экран - и вы собственно выводите ее но заодно и сохраняете в кеш Если же ваш шаблон представляет собой PHP-скрипт то можно конечно воспользоваться буферазацией - но более полный способ это префильтрирование и обработка данного PHP-кода шаблона в том числе с проверкой на синтаксис и отсутствие автоматической передчи управления - это даст вам возмоэжность использовать не только свои но и любые внешние шаблоны без опасения что они сломают систему сайта

 

Powered by ExBB FM 1.0 RC1