Кеширование с помощью ob_start(); - недоумеваю по поводу одного момента.

[Удален]
1527

Решил разобраться с технологией кеширования. Нашел простенький код:

<?php  /* Запись кэш-файла

* @param string contents – содержание буфера
* @param string filename – имя файла, используемое при создании кэш-файла
* @return void
*/
function writeCache($content, $filename) {
$fp = fopen('cache/' . $filename, 'w');
fwrite($fp, $content);
fclose($fp);
}

/* Проверка кэш-файлов
* @param string filename – имя проверяемого кэш-файла
* @param int expiry – максимальный «возраст» файла в секундах
* @return mixed содержимое кэша или false
*/
function readCache($filename, $expiry) {
if (file_exists('cache/' . $filename)) {
if ((time() - $expiry) > filemtime('cache/' . $filename)) //Получить время последнего изменения файла
return FALSE;
$cache = file('cache/' . $filename);
return implode('', $cache); //Возвращает строку, полученную объединением строковых представленийэлементов массива pieces, со вставкой строки glue между соседними элементами.
}
return FALSE;
}
?>

<?php



// Начинаем буферизацию вывода


ob_start();

// Обработка шапки
if (!$header = readCache('3_header.cache', 1)) {
// Вывод шапки
?>

<!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 echo date('H:i:s'); ?> <br />

<?php

$header = ob_get_contents();

ob_clean();

echo $header;
writeCache($header,'3_header.cache');
}
else
{
echo $header;

}


?>

но есть в нем один момент, которого я не понимаю. В обоих случаях echo $header; выводит на экран содержимое буфера, хотя вызова ob_end_clean (который бы отключил буферизацию) еще не было.

ewg777
На сайте с 04.06.2007
Offline
225
#1

 if (!($header = readCache('3_header.cache', 1))) { 
Скобок не хватает.
$cache = file('cache/' . $filename);
return implode('', $cache);

Такие скрипты надо сразу удалять.

ob_start();
echo 1;
$contents = ob_get_contents();
ob_end_clean();
FeoOne
На сайте с 27.12.2008
Offline
32
#2
хотя вызова ob_end_clean (который бы отключил буферизацию) еще не было.

$header = ob_get_contents();
ob_clean();

RTFM

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий