Кэширование PHP

12
nash
На сайте с 01.04.2006
Offline
171
1251

Народ, кто умеет кэшировать php страницы,

я тут заделал, в локале работает, на сервере нет почему-то


<?
$maxAge=1800;
$expireTime = gmdate("D, d M Y H:i:s", time()+$maxAge);
header("Cache-Control: max-age=$maxAge");
header("Expires: $expireTime GMT");
?>

Получается что хидер отдает дату когда документ устареет, а до того времени открывает его из кэша, но работает только локально, кто подскажет в чем проблема?

!kt0
На сайте с 28.06.2006
Offline
46
#1

PHP как модуль скомпилирован?

http://seorepa.com/ (http://seorepa.com/) - блог был там, пока не запилили mchost
nash
На сайте с 01.04.2006
Offline
171
#2
!kt0:
PHP как модуль скомпилирован?

хороший вопрос, если бы знал то ответил..

как это можно узнать и важно ли это?

NB
На сайте с 14.09.2004
Offline
95
#3

nash, проверьте еще заголовок Last-Modified:

nash
На сайте с 01.04.2006
Offline
171
#4
Nick Bubelo:
nash, проверьте еще заголовок Last-Modified:

Дописывал я еще и такое:

$last_modified=gmdate("D, d M Y H:i:s", time());

header("Last-Modified: $last_modified GMT");

опять же локально рулит, а на сервере нет

NB
На сайте с 14.09.2004
Offline
95
#5

Ссылку покажите

SunDrop
На сайте с 28.12.2005
Offline
34
#6

А под кэширование я так вижу ты понимаешь кэширование на стороне прокси/браузера?

В 20 лет он знал 9 операционных систем и 15 языков программирования, но ни одной женщины
nash
На сайте с 01.04.2006
Offline
171
#7

да, на стороне браузера

SunDrop
На сайте с 28.12.2005
Offline
34
#8

Истечение срока жизни страницы

Самым простым в использовании заголовком является заголовок Expire:


<?php
/**
* Посылает заголовок Expires HTTP 1.0.
* @param int количество секунд до времени истечения срока жизни
*/
function setExpires($expires){
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . 'GMT');
}

// Устанавливаем заголовок времени истечения срока жизни Expires
setExpires(10);

// Отображаем
echo 'Эта страница самоуничтожится через 10 секунд<br />';
echo 'Сейчас ' . gmdate('H:i:s') . ' GMT<br />';
echo '<a href="' . $_SERVER['PHP_SELF'] . '">Посмотреть вновь </a><br />';
?>

Более практично использовать заголовки Last-Modified и If-Modified-Since, доступные в HTTP 1.0. Технически он известен, как выполнение условного GET-запроса, вы возвращаете любой контент, основываясь на условии пришедшего заголовка запроса If-Modified-Since.


<?php
// Получаем заголовки запроса клиента – только для Apache
$request = getallheaders();

if (isset($request['If-Modified-Since'])) {
// Разделяем If-Modified-Since (Netscape < v6 отдаёт их неправильно)
$modifiedSince = explode(';', $request['If-Modified-Since']);

// Преобразуем запрос клиента If-Modified-Since в таймштамп
$modifiedSince = strtotime($modifiedSince[0]);
} else {
// Устанавливаем время модификации в ноль
$modifiedSince = 0;
}
?>

Наконец, мы проверяем, был ли модифицирован кэш с тех пор как посетитель получал эту страницу в последний раз. Если это не так, мы просто посылаем в заголовке отклик Not Modified и прекращаем выполнение скрипта, не нагружая канал передачи данных


<?php
// Сравниваем время последней модификации контента с кэшем клиента
if ($lastModified <= $modifiedSince) {
// Разгружаем канал передачи данных!
header('HTTP/1.1 304 Not Modified');
exit();
}
?>
nash
На сайте с 01.04.2006
Offline
171
#9

сенкс, попробую так, потом отпишу о результатах

SunDrop
На сайте с 28.12.2005
Offline
34
#10

nash, а еще почитай эту статью:

Правильное HTTP-кэширование: httplib2

Может тоже поможет.

12

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