|
|
|
| наткнулся на статью в которой приводится пример создания файла с html данными на стороне сервера , типа кеш.
пример демонстрирует вывод и получения данных в буфер.
типа того:
<?php
// Если существует кэшированная версия…
if (file_exists('./cache/2.cache')) {
// Читаем и выводим файл
readfile('./cache/2.cache');
exit();
}
// Начинаем буферизацию вывода
ob_start();
// Выводим остальной HTML
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Кэшированная страница</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
Эта страница кэшируется средствами PHP
<a href="http://www.php.net/outcontrol">Функции управления выводом</a>
</body>
</html>
<?php
// Получаем содержимое буфера
$buffer = ob_get_contents();
// Останов буферирования и вывод буфера
ob_end_flush();
// Сохранение кэш-файла с контентом
$fp = fopen('./cache/2.cache', 'w');
fwrite($fp, $buffer);
fclose($fp);
?>
|
хедер и футер находятся и так в физических html/tpl файлах с использованием
cache-control, expires заголовков.
скорее тут интересует кеширование выборки из БД, например огромного списка меню в интернет-магазине... но для чего действительно ob_start() ???
- делаем выборку из БД
- суем результат в файл на хосте
- инклюдим/принтим его
- при обновлении страницы/повторном заходе, ищем этот файл в нашем кеше и сверяем время его изменения с текущим если фиксируем нужную нам разницу, то делаем повторно выборку из БД, пишем в этот файл и инклюдим/принтим в противном случае просто инклюдим этот файл. | |
|
|
|
|
|
|
|
для: moonfox
(06.12.2009 в 19:21)
| | > но для чего действительно ob_start() ???
http://lmgtfy.com/?q=ob_start
Всё, что написано далее мне непонятно. Что ты хочешь от нас?
P.S. Кеширование всей страницы сразу практически смысла не имеет. | |
|
|
|
|
|
|
|
для: Fractured#
(06.12.2009 в 19:57)
| | Это почему? | |
|
|
|
|
|
|
|
для: GeorgeIV
(06.12.2009 в 20:14)
| | вы лучше скажите
зачем в примере используют буфер
если можно и без этого. | |
|
|
|
|
|
|
|
для: moonfox
(06.12.2009 в 20:19)
| | Попробуйте и увидите для чего!
Чтобы страница сформировалась правильно, сначала должны уйти заголовки( они не буферизируются, а уже потом остальное из буфера). Это гарантия того, что если где то в коде есть посылка заголовка, он уйдет раньше, чем тело HTML.
А второе, это же надо весь выводимый HTML-код запихать в переменную, тобы записать в файл. Буферизация и тут поможет. | |
|
|
|
|
|
|
|
для: GeorgeIV
(06.12.2009 в 20:24)
| | правильно написали
Используя ob_start в самом начале выполнения вашего приложения, вы можете посылать заголовки в любой понравившейся точке программы, не сталкиваясь с обычными ошибками. Затем, как только вы будете уверены, что больше выводить HTTP-заголовки не потребуется, вы можете сразу же вывести содержимое страницы из буфера.
(прим. переводчика: следует заметить что подобное использование данной функции крайне неоправдано. В большинстве случаев необходимости в использовании буферизации вывода для избавления ошибок указанного типа просто не существует и всё с лёгкостью может быть исправлено правильным проектированием приложения)
не аргумент.
Это гарантия того, что если где то в коде есть посылка заголовка, он уйдет раньше, чем тело HTML.
А второе, это же надо весь выводимый HTML-код запихать в переменную, тобы записать в файл. Буферизация и тут поможет.
я использую смарти, поэтому все равно все лежит в переменной или массиве. | |
|
|
|
|
|
|
|
для: moonfox
(06.12.2009 в 20:26)
| | Вы сросили, вам ответили.
Применять или нет, это уже ваше дело. | |
|
|
|
|
|
|
|
для: moonfox
(06.12.2009 в 20:26)
| | > я использую смарти, поэтому все равно все лежит в переменной или массиве
там лежит шаблон, а не сгенерированная страница.
И не надо использовать тег [code] для цитат. Либо режь строки на более короткие.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Fractured#
(06.12.2009 в 20:29)
| | а какая разница страница или шаблон????
другой момент что у смарти есть кеш в виде чистого пхп, связанного с его отработкой.
я говорю о сокращении обращений к БД, а для того чтоб в кеш в смарти попали наши выборки их выбрать и отдать надо.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: moonfox
(06.12.2009 в 20:33)
| | >а какая разница страница или шаблон????
Попытайся самостоятельно опеределить различия между шаблоном и сгенерированной страницей.
> я говорю о сокращении обращений к БД
Так кешируй результаты запросов, а не всю страницу. | |
|
|
|
|
|
|
|
для: Fractured#
(06.12.2009 в 20:36)
| | однако....
что шаблон, что php с printam'а всяких там <html><div>...
в обоих случаях есть "шаблон" и есть "сгенированная страница".
и кто говорил о "всей странице...", епт, всего что хотелось понять насколько необходимо использовать буфер для сохранения результатов выборки во внешний файл а потом подключать его..
ладно все) | |
|
|
|
|
|
|
|
для: moonfox
(06.12.2009 в 20:46)
| | > и кто говорил о "всей странице...", епт,
Почитате, что такое ob_start().
> в обоих случаях есть "шаблон" и есть "сгенированная страница".
Вот кусок шаблона:
{foreach name=outer item=contact from=$contacts}
<hr />
{foreach key=key item=item from=$contact}
{$key}: {$item}<br>
{$key}: {$item}<br />
{/foreach}
{/foreach}
|
(его PHP-эквивалент тоже с натяжкой можно считать шаблоном)
А вот кусок страницы, которая может быть получена из такого шаблона:
<hr />
phone: 1<br />
fax: 2<br />
cell: 3<br />
<hr />
phone: 555-4444<br />
fax: 555-3333<br />
cell: 760-1234<br />
|
[поправлено модератором] | |
|
|
|