Эта тема на forum.dklab.ru


А: Проблема с кэшированием
Проблема вот в этом коде: $this->parse($array,$tpl);
if($cashe){
$url=$GLOBALS['REQUEST_URI'];
$crc=md5($url);
$modif=time()-@filemtime ("cashe/$crc");
if ($modif<600)
{
echo $this->filestring("cashe/$crc");
}
if($echo){
ob_start ();
echo $this->getparsedtext($tpl);
$cach = ob_get_contents();
$fp = @fopen ("cashe/$crc", "w");
@fwrite ($fp, $cach);
@fclose ($fp);
ob_end_clean ();
}
else return $this->getparsedtext($tpl);

Почему то в браузере при первом вызове пустой экран, а при втором и сл. - всё нормально. В чем проблемка? Я ведь нигде ничего не прерываю.
Пожалуйста подскажите,
буду очень признателен!
7.3.:
А:
Чисто ради спортивного интереса - что это за класс, можно исходник?
Anonymous:
Помоему это класс yUAC, мне его друг по почте прислал. Не знаю, но называется yuactpl.
Дмитрий Котеров:
if($echo){
Ну и где этой переменной что-нибудь присваивается?
Anonymous:
Да, я просто всю функцию не приводил. Это всё параметры функции. Тут смысл помоему ob_start(); дело.
Я уже не знаю чего и делать...
Дмитрий Котеров:
Отлаживать, вот чего.
Anonymous:
Да вот, я уже тут все функции по одиночке перебираю... не знаю как и делать. Т.е когда создаётся кэш, программма завершается.
bæv:
А, проверьте, чему у Вас $modif равняется при первом запуске.
Anonymous:
А, проверьте, чему у Вас $modif равняется при первом запуске.
$modif=time()-@filemtime ("cashe/$crc"); А что тут не верно?
bæv:
проверьте, чему

Блин, численное значение посмотрите.
Anonymous:
Сейчас - 265 мин. Подчёркиваю минут. А там лимит 600 секунд.
bæv:
Сейчас - 265 мин.

Это точно -- при первом запуске? То есть, кэш ещё не создавался?

P.S. Я бы переменную $echo переименовал. Так, на всякий случай...
Anonymous:
Про $echo - пробовал. Не помогло, но всё равно исправлю.
Нет кэш уже был создан. Чёрт, а если у нас время - 0часов:1мин:0с. , то что $modif = 60 секунд, а кэша ещё не было создано ведь так?
Как это можно избежать?
Заранее благодарен!
bæv:
Нет кэш уже был создан.
Я, вообще-то, думал, что Вы под "первым запуском" подразумеваете ситуацию, когда кэша ещё нет.

Как это можно избежать?
Вы б в мануале про функцию time() почитали что ли -- при чём тут часы и минуты?
Да и про filemtime почитайте -- особенно про то, что результат этой функции кэшируется.
Anonymous:
Почитал. Помоему я вообще не знаю, как мой вариант работает...
Может вы мне что-нибудь предложите насчёт кэширования страницы?
Заранее благодарен!
P.S: Мне этот вариант порекомендовали. Вот что google всемогущий делает. Вот у Spectacor'a так... http://spectator.ru/technology/php/caching
bæv:
Помоему я вообще не знаю, как мой вариант работает...
По-моему, с этой фразы можно начать новый топик в форуме "Дзен"...
Anonymous:
Смешно. :)
Только вот проблема осталась, как же её можно истребить?
bæv:
Так, вот тут: Почему то в браузере при первом вызове пустой экран, а при втором и сл. - всё нормально. -- что имеется ввиду? Что значит "первый вызов"?
Anonymous:
Это. т.е файла с кэшем нет. Вы запускаете и файл появляется, но пустой экран, а при последующих вызовах всё нормально, т.к. файл читается изи кэша
bæv:
Это. т.е файла с кэшем нет.
Это кто писал?
Anonymous:
Гость
bæv:
Гость
-- это я и сам заметил. А который из ?
Anonymous:
Да незнаю, но вот код то не работает? И вообще нужно ли кэшировать страницы, если применяется движок???
Anonymous:
Ура! Оказывается строчку: ob_end_clean (); надо было сразу пустить после $cach = ob_get_contents();
ДА! И вот вопросик: надо использовать функцию filectime() или filemtime()??
Anonymous:
Всё тему можно закрыть!

Эта тема на forum.dklab.ru