Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Снова проблемы с кешированием...
 
 автор: !!Yurchik!!   (28.01.2005 в 22:21)   письмо автору
 
 

Почитал ваш топик по кешированию, включил все мета-данные в свой скрипт, но после перезагрузки страницы:

echo "<HTML><HEAD>  
   <META HTTP-EQUIV='Refresh' CONTENT='0; URL=history.php'> 
   </HEAD></HTML>"; 

опять отображется все не так: счетчик уменьшается, новые сообщения исчезают... Я думаю, что это опять-таки кеширование...

Но счетчик вообще перестал наростать даже при полной перезагрузке страницы (Ctrl+F5)... На локальном хосте все 100% работало (если надо, прикреплю скрипты), а в нете почему-то не работает... Может скрипты не имеют доступа на запись в файл (т.к. при первом вхождении скрипт должен перезаписывать содержимое файла: наращивать цифру)... Помогите с проблемой, плиз!

Сайт лежит на www.body-build.h14.ru
Спасибо большое!

   
 
 автор: cheops   (28.01.2005 в 23:11)   письмо автору
 
   для: !!Yurchik!!   (28.01.2005 в 22:21)
 

Перво наперво создайте простейший скрипт, который будет осуществлять запись заранее подготовленной информации в файл - и посмотрите имеют скрипты право на запись или нет, чтобы исключить возможность кеширования.

   
 
 автор: !!Yurchik!!   (28.01.2005 в 23:45)   письмо автору
 
   для: cheops   (28.01.2005 в 23:11)
 

Скорее всего дело не в этом... Так как в гостевой книге сообщения добавляются, значит скрипты пишут таки в файл...
Проблема явно с кешированием...
P.S. А что это за минусы Дизайнер поставил?

   
 
 автор: glsv (Дизайнер)   (29.01.2005 в 00:01)   письмо автору
 
   для: !!Yurchik!!   (28.01.2005 в 23:45)
 

> P.S. А что это за минусы Дизайнер поставил?
Извиняюсь. Это я перепутал темы и прошлось потом срочно стирать свои сообщения :)

   
 
 автор: cheops   (29.01.2005 в 00:23)   письмо автору
 
   для: !!Yurchik!!   (28.01.2005 в 23:45)
 

Хм... а приведите заголовки которыми вы подавляете кэширование. Не смотря на то, что существует стандарт, прокси-сервера создают таким образом чтобы они вели себя как взбредёт в голову их владельцам, которые пытаются минимизировать трафик любыми доступными способами.

   
 
 автор: !!Yurchik!!   (29.01.2005 в 00:34)   письмо автору
 
   для: cheops   (29.01.2005 в 00:23)
 

Блин, а счетчик таки не меняется... Может действительно с правами доступа что-то (я на форуме про Апач как раз про это и спрашиваю, пока нету ответа...)
Я лучше выложу весь скрипт, на который осуществляется редирект с индексного файла:
Важные комментарии я напишу сейчас на русском

<html>
<head>
<title>Історія Бодібілдінгу</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<!-- Пробовал все ниже идуюие заголовки -->
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta HTTP-EQUIV="Expires" CONTENT="0"> 
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<style> 
  .attrib{font-family: Verdana, sans-serif; font-size: 13px; text-align: justify;}
  .vote {font-family: Arial, sans-serif; font-size: 13px;} 
  td.info {font-family: Arial, sans-serif; font-size: 13px;}
  td.navig {font-family: Arial, sans-serif; font-size: 13px;}
</style>

</head>

<body background="../../fon.jpg" link="BLACK" alink="BLACK" vlink="BLACK">  

<?
 
include "../buttons/buttons.php"// вбудовуємо сторінку з кнопками
 
require "../load_from_file.class.php"// вбудовуємо клас

//ВОТ ТУТ СОХРАНЯЕМ ТЕКУЩУЮ ПОСЕЩАЕМОСТЬ
 
$f=fopen("../vidvid/vidvid.txt","r");  // зберігаємо в змінну кількість відвідувань
 
$kilk=fread($f,5);
 
fclose($f); 

// ПРИ ПЕРВОМ РЕДИРЕКТЕ Я ТАКЖЕ ДОБАВЛЯЮ INC В АДРЕСНУЮ СТРОКУ
 
if(isset($_REQUEST['inc'])) // якщо перший редірект на сторінку, то збільшуємо кількість відвідувань
  
{
// ВОТ ТУТ И ДОЛЖНА ПРОИЗВОДИТЬСЯ ЗАПИСЬ НОВОГО ЗНАЧ. В ФАЙЛ
   
$kilk++;
   
$f=fopen("../vidvid/vidvid.txt","w");
   
fwrite($f,$kilk);
   
fclose($f);
  
// ЭТО НЕ РАБОТАЕТ!!! КЕШИРУЕТ ВСЕ РАВНО!
// ПО ИДЕЕ ПОСЛЕ ЗАПИСИ В ФАЙЛ СТРАНИЧКА ДОЛЖНА ПЕРЕЗАГРУЗИТЬСЯ УЖЕ БЕЗ ПАРАМЕТРА INС
  
*echo "<HTML><HEAD>  
   <META HTTP-EQUIV='Refresh' CONTENT='0; URL=history.php'> 
   </HEAD></HTML>"
// refresh сторінки
  
}

?>  
// НУ ДАЛЬШЕ УЖЕ ВРОДЕ НИЧЕГО ВАЖНОГО НЕТУ
 <table align="center" width="800" border="0">  
  <tr>
   <td width="100">
    <p align="center"> <img src="../../animation.gif"> </p>
   </td>
   <td width="550">
    <p align="center"> <img src="../../history/zagol.jpg"> </p>
   </td>
   <td width="150">
     <?require "../vidvid/vidvid.php";?>
   </td>
  </tr>
 </table>

<table align="center" width="800" border="0">  
 <tr>
  <td valign="top">
   <? 
     
if(isset($_REQUEST['vote'])) {require "../vote/vote_res.php";} // якщо переданий параметр vote, то показуємо результати
     
else {require "../vote/vote.php";} 
     echo 
"<br>"; require "../navig/navig.php";  echo "<br>"; require "../info/info.php";
   
?></td>
  
  <td valign="top">
   <table align="center" width="650" border="1" bordercolor="BLACK" bgcolor="#CCFFCC" cellspacing=5 cellpadding=10>
    <tr>
     <td class="attrib">
      <?
       $load_f
=new Load_from_file("../history/history.txt");    // об'єкт класу, конструктор якого виводить текст з заданого файлу в броузер
      
?> 
     </td>
    </tr>
   <tr><td class="attrib">
     <? $load_f=new Load_from_file("../history/mastering.txt"); ?>
   </td></tr> 
  </table>
 </td>
 </tr>
</table> 
</body>
</html>

   
 
 автор: glsv (Дизайнер)   (29.01.2005 в 00:56)   письмо автору
 
   для: !!Yurchik!!   (29.01.2005 в 00:34)
 

А вы проверьте счетчик без записи в файл. Просто с выводом в браузере.
И значение вот этой директивы тоже проверьте $_REQUEST['inc']
Может ее и нет вовсе. Всякое может быть.

if(isset($_REQUEST['inc']))

  echo $_REQUEST['inc'];
  echo "Здесь будет запись в файл";
}
?>  

   
 
 автор: !!Yurchik!!   (29.01.2005 в 18:08)   письмо автору
 
   для: glsv (Дизайнер)   (29.01.2005 в 00:56)
 

>А вы проверьте счетчик без записи в файл. Просто с выводом в
>браузере.
Работает, выводит то, что в файле (у меня на других страничках он и выводится просто, только на history.php с переменной inc должен наростать)

>И значение вот этой директивы тоже проверьте
>$_REQUEST['inc']
Хм... Ну на локальном хосте у меня все работало, я бы не рабочую версию даже и не отправлял бы... И в нете работает, т.к. если условие выполняется
>

>if(isset($_REQUEST['inc']))
>{ 
>  echo $_REQUEST['inc'];
>  echo &quot;Здесь будет запись в файл&quot;;
>}
>?&gt;  
>

то там за записью в файл идет "рефреш", а он выполняется.
Так что по сути только с файлом проблема...

   
 
 автор: !!Yurchik!!   (29.01.2005 в 18:34)   письмо автору
 
   для: glsv (Дизайнер)   (29.01.2005 в 00:56)
 

Короче, понял ситуацию наконец-то :) Но не знаю, как ее решить :(
Одним словом, если я через Ctrl+F5 (очистка кеша) перезагружаю страницу с параметром "inc", то счетчик таки увеличивается :) (одной проблемой меньше). Но если я просто перегружаю эту страницу, то, не смотря на все хедеры:

<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta HTTP-EQUIV="Expires" CONTENT="0"> 
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">

страница все равно достается из кеша (подгружается ее старый вариант с необновленным счетчиком) и эта старая страница даже в файл не залазит (я так понял)... Они просто в наглую подставляют только то, что вывел броузер (т.е. HTML код)... И как это назвать???

   
 
 автор: cheops   (29.01.2005 в 18:45)   письмо автору
 
   для: !!Yurchik!!   (29.01.2005 в 18:34)
 

Браузер IE? Обычно в свойствах обозревателя (Общие-Параметры-выставляют проверять наличие обновления сохранённых страниц при каждом посещении). Самый убойным заголовком по подавлению кэширования является
<?php
header
("Expires: Mon, 23 May 1995 02:00:00 GMT");
?>

попробуйте ещё его.

   
 
 автор: !!Yurchik!!   (29.01.2005 в 18:54)   письмо автору
 
   для: cheops   (29.01.2005 в 18:45)
 

Блин, попробовал - та же история, при полной перезагрузке обновляется и счетчик наращивается, но стоит потом нажать релоад и из кеша достается та же страничка (это даже видно невооруженным взглядом, т.к. она появляется почти сразу же)...

Но самое удивительное, что в гостевой книге попробовал добавить новое сообщение - и добавилось сразу же! Т.е. не из кеша достало страничку. Правда я там закоментировал "Релоад" после записи сообщения в файл и теперь если нажаь "Релоад" то последнее сообщение появится второй раз, но главное, что не кеширует!!! Блин, странно как-то... ничего не понимаю...

   
 
 автор: !!Yurchik!!   (29.01.2005 в 19:03)   письмо автору
 
   для: cheops   (29.01.2005 в 18:45)
 

Может мне им письмо написать...? Хотя это бесплатный хостинг (Холм), поэтому наверное ничего не дождусь... Хм... что же делать...? :(

   
 
 автор: cheops   (29.01.2005 в 19:25)   письмо автору
 
   для: !!Yurchik!!   (29.01.2005 в 19:03)
 

А заголовок
<?php 
header
("Expires: Mon, 23 May 1995 02:00:00 GMT"); 
?>

не пробовали - мне в таких случаях помогает.

   
 
 автор: !!Yurchik!!   (29.01.2005 в 19:45)   письмо автору
 
   для: cheops   (29.01.2005 в 19:25)
 

неа... вот весь раздел <head>: вроде есть все что надо, но не помогает... :(

<?php 
header
("Expires: Mon, 23 May 1995 02:00:00 GMT"); 
?>
<html>
<head>
<title>Історія Бодібілдінгу</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<style> 
  .attrib{font-family: Verdana, sans-serif; font-size: 13px; text-align: justify;}
  .vote {font-family: Arial, sans-serif; font-size: 13px;} 
  td.info {font-family: Arial, sans-serif; font-size: 13px;}
  td.navig {font-family: Arial, sans-serif; font-size: 13px;}
</style>
</head>


помогает только если перезагрузить с помощью Ctrl+F5

   
 
 автор: glsv (Дизайнер)   (29.01.2005 в 23:01)   письмо автору
 
   для: !!Yurchik!!   (29.01.2005 в 18:34)
 

Хм… а попробуйте при рефреше передавать произвольный параметр ?rand=".rand().

<?
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=history.php?rand=".rand()."'> 
   </HEAD></HTML>"
;
?>

   
 
 автор: !!Yurchik!!   (30.01.2005 в 11:23)   письмо автору
 
   для: glsv (Дизайнер)   (29.01.2005 в 23:01)
 

Дело в том, что я даже отключил рефреш (для упрощения на данный момент), т.е. у меня просто грузится "history.php?inc", которая должна увеличивать счетчик... Но она увеличивает его только при полном рефреше, а при простых просто выводит последнюю ее версию из кеша...

   
 
 автор: !!Yurchik!!   (30.01.2005 в 11:25)   письмо автору
 
   для: glsv (Дизайнер)   (29.01.2005 в 23:01)
 

P.S. Я уже им письмо даже отправил, но пока (как я и ожидал) они не спешат отвечать, хотя возможно выходной день... Но админ же все равно должен быть...

   
 
 автор: !!Yurchik!!   (30.01.2005 в 17:07)   письмо автору
 
   для: glsv (Дизайнер)   (29.01.2005 в 23:01)
 

Наконец-то я понял в чем штука! (Благодаря помощи Дизайнера: особенно последнее сообщение, и cheops).
Как я понял, скрипты не кешируются, если методами post или get сценарию переданы параметры, отличные от последних переданых!!! (Теперь я понял, почему в гост. книге если добавить новое сообщение оно отображается сразу - переменная переданая сценарию отличается от той, что в кеше)
Но возникает теперь проблема: как осуществить передачу каждый раз нового значения какой-то переменной сценариям, пусть даже эта переменная нигде не будет использоваться. Дизайнер предложил ф-ией генерации случайного числа, и это очень классное решение, я думаю. Но индексный файл у меня html, и в нем также прийдется эту ф-ию применять. Можно Java-Script применить, я думаю, но просто точно не помню как это сделать... Подскажите, плиз, и поделитесь мнениями насчет решения проблемы выше: может кроме Rand() есть еще решения.
Мой индесный файл:

<html>
<head>
<script language="JavaScript">

function load() 
 {
  window.location.href="../cgi-bin/history/history.php?inc";
 }

</script>
</head>

<body onLoad="load()">
</body>
</html>

   
 
 автор: !!Yurchik!!   (31.01.2005 в 21:30)   письмо автору
 
   для: !!Yurchik!!   (30.01.2005 в 17:07)
 

блин... и на письмо хостеры так и не отвечают... и тут новых советов нету... вобщем одно расстройство...
Кстати, даже "rand()" работает только один раз правильно... второй раз страничка опять же достается из кеша... короче, наверное, надо закидывать то место и искать другой бесплатный хостинг

   
 
 автор: cheops   (31.01.2005 в 22:34)   письмо автору
 
   для: !!Yurchik!!   (31.01.2005 в 21:30)
 

Хм... вы можете настроить работу вашего сайта так, чтобы HTML-файлы воспринимались как PHP-файлы, подробности по ссылке.

PS Тема просто очень длинная и сюда уже не охотно заглядывают :)))

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1010

   
 
 автор: glsv (Дизайнер)   (01.02.2005 в 00:16)   письмо автору
 
   для: !!Yurchik!!   (30.01.2005 в 17:07)
 

На JavaScript случайное чсило можно сгенерировать функцией Math.random()

function load() 

  window.location.href="../cgi-bin/history/history.php?inc&rand="+Math.random(); 
}

   
 
 автор: glsv (Дизайнер)   (28.01.2005 в 23:26)   письмо автору
 
   для: !!Yurchik!!   (28.01.2005 в 22:21)
 

-

   
 
 автор: glsv (Дизайнер)   (28.01.2005 в 23:27)   письмо автору
 
   для: !!Yurchik!!   (28.01.2005 в 22:21)
 

-

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования