Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет кеширования графики. Как грузить картинку из файла а не кеша? 
:(
    Опции темы
Guest
Дата 9.12.2005, 10:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте.
Есть сценарий, который динамически генерирует картинку gif, сохраняет её в файл с последующим выводом в броузер. При обращении к сценарию, броузер Internet Explorer выводит картинку не из файла, а из кеша, оставшегося от предыдущих запусков, а мне надо из файла. При обновлении страницы по refresh картинка выводится уже из файла, как и надо. Кстати, тот же FireFox всё делает правильно. То, что все мои http-заголовки отдаются сценарием броузеру по header, я убеждаюсь средствами отладки (запрашиваю заголовки перлом: perl.exe HEAD http://127.0.0.1/diagram.php, всё есть).

Как мне _СРЕДСТВАМИ_PHP_ заставить Internet Explorer выводить картинку из файла, а не из кеша при обращении к сценарию, а не только при обновлении? Т.е. может, что добавить/изменить в http-заголовках?

ОС: Windows 2003 Server.
Web-сервера: Apache-1.3.33 (на 80-м порту), IIS-6.0 (на 8080-м порту).
Php-5.0.5, подключен модулем.
Заранее, спасибо.

Код

<?php
Header("Cache-Control: no-cache, must-revalidate, max-age=0");
// Header("Cache-Control: no-cache");
Header("Connection: close");
Header("Date: ".($HeaDate=gmdate('D, d M Y H:i:s')." GMT"));
Header("Pragma: no-cache");
Header("Content-Type: text/html; charset=windows-1251");
Header("ETag: ".$ETag='a'.gmdate('his'));
Header("Expires: ".$HeaDate);
Header("Last-Modified: ".$HeaDate);
Header("Refresh: 60; URL={$_SERVER['REQUEST_URI']}");
define('IMAGE','diagram.gif');

// ... Здесь динамическая генерация картинки и запись её в файл.

echo <<<HTML
<!doctype html public "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Diagram</title>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate, max-age=0">
<!-- meta http-equiv="Cache-Control" content="no-cache" -->
<meta http-equiv="Connection" content="close">
<meta http-equiv="Date: " content="$HeaDate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="ETag" content="$ETag">
<meta http-equiv="Expires" content="$HeaDate">
<meta http-equiv="Last-Modified" content="$HeaDate">
<meta http-equiv="Refresh" content="60; url={$_SERVER['REQUEST_URI']}">
</head>
<body  bgcolor="#d3d3d3">
HTML;

$ImgParam=GetImageSize(IMAGE);
echo("<img src=\"".IMAGE."\" alt=\"".IMAGE."\" border=\"0\" {$ImgParam[3]}></img>\n");
echo'</body></html>';
?>

  Вверх
MuToGeN
Дата 9.12.2005, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 2
Всего: 32



Сохраняй картинку под разными именами (например, 'file'.rand(1,100000000).'.gif'), сохраняй ее имя и в скрипте, выдающем хтмл, выдавай это имя. Или выдавай картинку PHP скриптом, дабы имелась возможность отослать соответствующие хедеры при передаче самой картинки, а не html кода.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Mal Hack
Дата 10.12.2005, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Ну или отдавать картинку скриптом.
PM ICQ   Вверх
Guest
Дата 12.12.2005, 14:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Если отдавать картинку скриптом, убирается 1-я проблема, появляются 2 новых:
1. Картинка по вертикали занимает больше экрана, а броузер (любой) ужимает её до размеров окна, в том числе и при обновлении по refresh. Она становится нечитабельной. Это, конечно, отключается в броузере, но как это сделать средствами php - неизвестно.
2. Картинка имеет фон, совпадающий с фоном в html, а при отображении в броузере (любом) вокруг неё образуется белый кант, что нарушает общий стиль и оставляет впечатление неаккуратности ресурса.
Остановился на варианте с разными именами. Нюанс в том, что имя файла картинки надо запоминать в куки и удалять при следующем запуске сценария, чтобы не создавать мусора на диске.
Остановился на таком варианте (если это интересно).

Код

function GenerateFName(){
         // $DiaName=tempnam('.','dia');
         $DiaName=sprintf("dia%0.5s.gif",mt_rand());
         if(isset($_COOKIE['DiaName'])&&file_exists($_COOKIE['DiaName']))unlink($_COOKIE['DiaName']);
         setcookie('DiaName',$DiaName,time()+3600*24*31);
         return $DiaName;}


Ещё раз, спасибо за помощь.

  Вверх
MuToGeN
Дата 12.12.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 2
Всего: 32



Цитата(Guest @ 12.12.2005, 14:48)
но как это сделать средствами php - неизвестно
Известно. Никак. Зато можно отдавать пользователю не картинку напрямую, а хтмл код (<img src="image.php" alt="" />, image.php выдает картинку). Вторая проблема лечится аналогичными средствами.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
fregs
Дата 13.12.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: 1
Всего: 1



по идее если изменить путь к картинке на динамический (что нибудь вроде image.jpg?tmp=0.34538692202) то броузер будет читать не из кеша
дорпустим так
Код

echo("<img src=\"".IMAGE."?tmp=".md5(uniqid())."\" alt=\"".IMAGE."\" border=\"0\" {$ImgParam[3]}></img>\n");



PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.4082 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.