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]   

> Описание: Что такое кеш.
sanj
Отправлено: 03 Июня, 2007 - 22:05:19
Post Id



Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Апр. 2007  
Откуда: Россия


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

[+]


Я изучаю сейчас сайтостроение и читаю книги по этой теме и много информации идет о кеше, а что это такое нигде не пишут. Скажите пожалуйста что такое кеш и что он делает.
 
 Top
kamikadze
Отправлено: 03 Июня, 2007 - 22:16:15
Post Id



Склонен к самоубийству


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


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




Зачастую кеш это страници либо у юзера на компе, либо это сгенерированые страници на серваке! зАчастую в крупных админках делается папка для кеша откуда и берутся файлы для вывода
 
 Top
sanj
Отправлено: 03 Июня, 2007 - 22:23:42
Post Id



Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Апр. 2007  
Откуда: Россия


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

[+]


Как я понял это копирование в память. Это что то типа proxy?
А как этот кеш реализавать в коде?
 
 Top
evgenijj
Отправлено: 03 Июня, 2007 - 22:34:39
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




sanj пишет:
Я изучаю сейчас сайтостроение и читаю книги по этой теме и много информации идет о кеше, а что это такое нигде не пишут. Скажите пожалуйста что такое кеш и что он делает.

Допустим, ползователь набирает в адресной строке браузера адрес http://someserver.com/support.html. Сервер находит у себя файл support.html и отдает его клиенту. Пользователь запросит еще несколько страниц и потом вернется на страницу support.html. Браузер не будет снова запрашивать эту страницу у сервера, а возьмет ее из кэша. Т.е. этот файл (support.html) браузер сохранят на винчестере пользователя. Аналогичную задачу решает Proxy-сервер.

Это для статичных страниц. По поводу динамических - нет смысла их кэшировать, это даже вредно. Ведь мы не знаем, КАК скрипт генерирует эту страницу. И даже если запрашивается вроде бы один и тот же файл http://someserver[dot]com/support.php нельзя сказать, что скрипт сформирует одинаковый HTML (он может зависеть, например, от времени суток).

Теперь по поводу кэширования средствами PHP. Зная, что данная страница, которая генерится скриптом, изменяется раз в сутки (например, ежедневное добавление новостей в раздел "Новости компании") мы можем, один раз сформировав HTML, сохранить его в файл, и отдавать пользователю, читая страницу из файла, а не формируя каждый раз динамически (т.е. выполняя запросы к БД и т.п.) Тем самым снижая нагрузку на сервер.

PHP:
скопировать код в буфер обмена
  1.  
  2. // директория для хранения кэшированных страниц
  3. $cachedir = './cache/';
  4. //время жизни кэша (60 минут)
  5. $cachetime = 3600;
  6.    
  7. $thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
  8. $cachelink = $cachedir.md5($thispage).".html";
  9. // Если файл страницы существует
  10. if ( is_file( $cachelink ) and ( (time() - $cachetime) < filemtime($cachelink) ) )
  11. {
  12.     // получаем содержимое страницы из кэша
  13.     $content = file_get_contents($cachelink);
  14. }
  15. else
  16. {
  17.     // формируем страницу
  18.     $content = get_page_content( $_GET["id_page"] );
  19.     // записываем страницу в кэш
  20.     file_put_contents($cachelink, $content);
  21. }
  22.  
  23. header('Content-Length: '.strlen($content));
  24. header("Content-Type: text/html; charset=windows-1251");
  25. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  26. echo $content;
  27.  


 
 Top
kamikadze
Отправлено: 03 Июня, 2007 - 22:40:03
Post Id



Склонен к самоубийству


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


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




get_page_content можно посмотреть на эту функцию! НАпиши листинг её плз!
 
 Top
sanj
Отправлено: 03 Июня, 2007 - 22:41:22
Post Id



Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Апр. 2007  
Откуда: Россия


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

[+]


Теперь понятно. Спасибо!!!
 
 Top
evgenijj
Отправлено: 03 Июня, 2007 - 22:58:57
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




kamikadze пишет:
get_page_content можно посмотреть на эту функцию! НАпиши листинг её плз!

Эта функция - маленький кусочек моей CMS. Он тебе ничего особо не расскажет
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function get_page_content( $id_page, &$title )
  4. {
  5.         // Получаем шаблон страницы
  6.         $page_tpl = array();
  7.         $page_tpl = get_page_template( $id_page );
  8.         // $id_tpl - уникальный идентификатор шаблона
  9.         // $title - содержимое тега <title> </title> страницы
  10.         // $keywords - ключевые слова страницы
  11.         // $description - описание страницы
  12.         list ( $id_page, $id_tpl, $name, $title, $keywords, $description ) = $page_tpl;
  13.  
  14.         // Получаем имя файла шаблона и количество полей в нем
  15.         $tpl_file_name = get_template_name( $id_tpl );
  16.        
  17.         // Узнаем какими модулями наполнены поля шаблона
  18.         $fill = array();
  19.         $fill = get_fill_fields( $id_page );
  20.        
  21.         // $add_title - вспомогательная переменная, которая может содержать дополнение
  22.         // к тегу <title> </title> страницы. Например, для Интернет-магазина содержимое
  23.         // тега будет иметь вид: <title> $title : $add_ttl </title>
  24.         // Интернет-магазин : Извещатель охранный магнитоконтактный ИО 102-11М (СМК-3)
  25.         $add_title = "";
  26.        
  27.         // Получаем html полей шаблона
  28.         for ( $i = 0; $i<=5; $i++ )
  29.         {
  30.                 $ttl = $fill["title"][$i];
  31.                 $fld = $fill["field"][$i];
  32.                 if ( $fld != "none" )
  33.                 {
  34.                         $layout = array();
  35.                         $layout = explode( "|", $fill["layout"][$i] );
  36.                         $add_ttl = "";
  37.                         $html_field[] = get_html_field( $ttl, $fld, $layout, $_GET["id_page"], $add_ttl );
  38.                         if ( !empty( $add_ttl ) ) $add_title = $add_ttl;
  39.                 }
  40.                 else
  41.                 {
  42.                         $html_field[] = "";
  43.                 }
  44.         }
  45.        
  46.         if ( !empty( $add_title ) ) $title = $title." : ".$add_title;
  47.        
  48.         // Получаем html главного меню
  49.         $html_main_menu = get_html_main_menu();
  50.        
  51.         // Получаем html подменю - вложенные (дочерние) страницы
  52.         $html_submenu = get_html_submenu( $id_page );
  53.        
  54.         // Получаем html формы для поиска
  55.         $html_search = get_search_form();
  56.        
  57.         // Получаем html формы выбора производителя
  58.         $html_mnf = get_choice_mnf_form();
  59.        
  60.         // Получаем html ссылки на страницу со списком всех лидеров продаж
  61.         $html_all_leaders = get_link_all_leaders();
  62.        
  63.         // Получаем форму для авторизации пользователя
  64.         $html_login = get_siteuser_login_form( $id_page );
  65.        
  66.         // Получаем html покупательской корзины - краткая информация
  67.         $html_basket = get_html_basket();
  68.        
  69.         // Получаем случайного лидера продаж
  70.         $html_random_ldr = get_random_leader();
  71.        
  72.         // Получаем путь до страницы
  73.         $html_path = get_html_path( $id_page, $title );
  74.        
  75.         // Читаем файл шаблона в строковую переменную
  76.         $html_tpl = get_html_template( $tpl_file_name, TEMPLATES_PATH );
  77.        
  78.         // Заменяем в шаблоне поля {fieldn} на полученный html заполняющих их модулей
  79.         for ( $i = 0; $i<=5; $i++ )
  80.         {
  81.                 $field = "{field".$i."}";
  82.                 $html_tpl = str_replace($field, $html_field[$i], $html_tpl);
  83.         }
  84.        
  85.         $html_tpl = str_replace("{search}", $html_search, $html_tpl);
  86.         $html_tpl = str_replace("{loginform}", $html_login, $html_tpl);
  87.         $html_tpl = str_replace("{basket}", $html_basket, $html_tpl);
  88.         $html_tpl = str_replace("{allleaders}", $html_all_leaders, $html_tpl);
  89.         $html_tpl = str_replace("{randomleader}", $html_random_ldr, $html_tpl);
  90.         $html_tpl = str_replace("{manufacturers}", $html_mnf, $html_tpl);
  91.         $html_tpl = str_replace("{main_menu}", $html_main_menu, $html_tpl);
  92.         $html_tpl = str_replace("{submenu}", $html_submenu, $html_tpl);
  93.         $html_tpl = str_replace("{path}", $html_path, $html_tpl);
  94.         $html_tpl = str_replace("{title}", $title, $html_tpl);
  95.         $html_tpl = str_replace("{keywords}", $keywords, $html_tpl);
  96.         $html_tpl = str_replace("{description}", $description, $html_tpl);
  97.        
  98.         return $html_tpl;
  99. }
  100. ?>
  101.  
 
 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