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 :: Cache_Lite

 PHP.SU

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


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

> Без описания
garvey
Отправлено: 11 Июня, 2010 - 17:59:24
Post Id



Частый посетитель


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


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




Сегодня первый раз работал с кэшированием. Скачал 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? Откуда брать контент?
 
 Top
isle
Отправлено: 11 Июня, 2010 - 23:03:09
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




Капец, для кеша уже и целые классы пишут, скоро, наверно, CMS запустят Ха-ха

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



Частый посетитель


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


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




При чем здесь ФТП? Обычное кэширование страниц.
 
 Top
isle
Отправлено: 11 Июня, 2010 - 23:32:43
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




garvey пишет:
При чем здесь ФТП? Обычное кэширование страниц.


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

---
П.С. Страницы обычно не кешируют, кешируют отдельные блоки страницы во временной директории (папке) временного файла, который имеет определенное время жизни. Ну, например, можно на сутки или на час закешировать вывод блока Категорий сайта, чтоб их постоянно из базы не дергать и не обсчитывать логику, не обрабатывать массивы и т.д., а просто выводить готовый блок html, обновляя его раз в сутки, что значительно уменьшает нагрузку на сервер.

(Отредактировано автором: 11 Июня, 2010 - 23:37:21)

 
 Top
Joo
Отправлено: 12 Июня, 2010 - 06:38:57
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


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




isle пишет:
теперь оказалось, что простой кеш на ФТП


Мне вот тоже интересно, что значит на ФТП? Вы имеете ввиду, на накопителе сервера, или все таки использую ФТП? Я бы Вам посоветовал выражаться более корректно, тогда как Вы говорите, на ФТП, люди подразумеваю сохранение данных через протокол передачи файлов (ФТП), со всем вытекающим.


-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
isle
Отправлено: 12 Июня, 2010 - 06:43:21
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




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


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

П.С. вы, наверно, уже спите Радость а у нас уже петухи пропели... рассвет... скоро лягу на часок.
 
 Top
Joo
Отправлено: 12 Июня, 2010 - 06:50:22
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


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




isle пишет:
а можно на ФТП (на винте сервера)

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

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

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

p.s. Прошу прощения за оффтоп

(Отредактировано автором: 12 Июня, 2010 - 06:52:30)



-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
garvey
Отправлено: 12 Июня, 2010 - 10:05:42
Post Id



Частый посетитель


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


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




Ну что. Разве никто никогда не кэшировал страницы?
 
 Top
sergtka4ov
Отправлено: 13 Июня, 2010 - 12:24:40
Post Id



Новичок


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


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

[+]


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'
Это самы простой вариант, от него уже можно плясать дальше усложняя и модифицируя
 
 Top
JustUserR
Отправлено: 13 Июня, 2010 - 13:29:55
Post Id



Активный участник


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


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




garvey пишет:
Вроде бы всё правильно, но вот проблема.
Я этот класс вставляю в скрипт projects.php, оттуда я отсылаю данные в шаблон Smarty. Т.е. весь контент страницы находится в projects.tpl.
Что присваивать переменной $data? Откуда брать контент?
Если у вас имеется шаблон страницы в специальном файле с подстановочными тегами - то необходимо считиывать этот файл поблочно в переменную и выполнять соответствующие значения подстановок - после чего все данные выести на экран и одновременно передать в класс кеширования
Можно также воспользоваться буферазицией - только в этом случае нужно разделить PHP-скрипт на отдельные секции вы воводу страницы из кеша и по генерации страницы и сохранению ее в кеш


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
garvey
Отправлено: 13 Июня, 2010 - 16:58:47
Post Id



Частый посетитель


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


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




Спасибо вам. Уже что-то получилось. Правда пока без шаблонов. Сейчас буду пробовать поблочно.
 
 Top
JustUserR
Отправлено: 14 Июня, 2010 - 12:02:25
Post Id



Активный участник


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


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




garvey пишет:
Правда пока без шаблонов. Сейчас буду пробовать поблочно
В данном случае все зависит от конкретной структуры шаблона и методов работы с ним - если шаблон представляет собой набор подстановочных тегов или является XML-файлов то в таком случае замена происходит по следующему прниципу - этот файл разбирается поэлементно или поблочно с помощью парсера и в нем производятся соответствующеи замены и подстановки - причем если в шаблоне вызывается какие-то функции из API вашего PHP-скрипта то они только возвращают значения и ничего не выводят - поэтому в результате обработки вы получаете большую строковую переменную предназначающуюся для вывода на экран - и вы собственно выводите ее но заодно и сохраняете в кеш Если же ваш шаблон представляет собой PHP-скрипт то можно конечно воспользоваться буферазацией - но более полный способ это префильтрирование и обработка данного PHP-кода шаблона в том числе с проверкой на синтаксис и отсутствие автоматической передчи управления - это даст вам возмоэжность использовать не только свои но и любые внешние шаблоны без опасения что они сломают систему сайта


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB